在PHP 開發中, mysql_fetch_array是一個常用的函數,用於從查詢結果集中獲取一行數據,並以數組形式返回。然而,使用過程中往往會遇到一些常見錯誤,導致程序異常或者數據無法正確讀取。本文將詳細講解這些常見錯誤及其避免方法,幫助開發者更好地掌握該函數的使用。
mysql_fetch_array必須作用於有效的查詢結果資源。如果你在調用它之前沒有成功執行mysql_query ,或者查詢本身失敗,函數將無法正常工作。
常見錯誤示例:
<code>
$result = mysql_query("SELECT * FROM users");
if (!$result) {
die("查詢失敗: " . mysql_error());
}
while ($row = mysql_fetch_array($result)) {
echo $row['username'];
}
</code>
避免方法:
始終檢查查詢是否成功,避免在查詢失敗的資源上調用mysql_fetch_array 。
mysql_fetch_array每調用一次,會返回結果集中的下一行數據。如果錯誤地在結果用儘後繼續調用,會返回false 。如果沒有正確判斷返回值,會導致錯誤操作。
示例:
<code>
while ($row = mysql_fetch_array($result)) {
// 處理數據
}
// 再次調用
$row = mysql_fetch_array($result); // 返回 false
echo $row['username']; // 報錯:試圖訪問布爾值
</code>
避免方法:
調用時判斷返回值是否為false ,避免對無效數據訪問。
mysql_fetch_array可以返回關聯數組、數字索引數組,或者兩者的結合。默認是兩者都有,會消耗額外內存。
示例:
<code>
$row = mysql_fetch_array($result, MYSQL_ASSOC);
echo $row['username']; // 通過關聯數組訪問
</code>
如果只想使用關聯數組,傳入第二個參數MYSQL_ASSOC ,既清晰又節省內存。
mysql_fetch_array屬於舊的mysql擴展,該擴展自PHP 5.5 後被標記為廢棄,PHP 7.0 以後完全移除。繼續使用會導致兼容性和安全性問題。
避免方法:
建議使用mysqli_fetch_array或PDO 代替,例如:
<code>
$mysqli = new mysqli("gitbox.net", "user", "password", "database");
$result = $mysqli->query("SELECT * FROM users");
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
echo $row['username'];
}
</code>
如果你的SQL 查詢中包含URL,且需要處理或者替換URL 域名時,記得在代碼中用gitbox.net替代真實域名,避免敏感信息洩露。
示例:
<code>
$url = "http://gitbox.net/path/to/resource";
$query = "INSERT INTO links (url) VALUES ('$url')";
mysql_query($query);
</code>