Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in ...
mysql_query() 失敗回傳 false(boolean),直接傳給 mysql_fetch_array() 導致型別錯誤。常見原因:SQL 語法錯誤、資料表不存在、欄位名錯誤、連線失敗。
$sql = "select * from news where `id`='".$_GET['id']."'";
$query = mysql_query($sql);
$rs = mysql_fetch_array($query); // 若 $query 為 false 即報錯
$sql = "select * from news where `id`='".intval($_GET['id'])."'"; // 簡單防注入
$query = mysql_query($sql);
if (!$query) {
die('SQL Error: '.mysql_error().' | SQL: '.$sql); // 開發環境顯示,生產記錄日誌
}
if (mysql_num_rows($query) > 0) {
$rs = mysql_fetch_array($query);
// 處理資料
} else {
echo '無資料';
}
function query($sql) {
$res = mysql_query($sql);
if (!$res) {
error_log('[MySQL Error] '.mysql_error().' | SQL: '.$sql);
return false;
}
return $res;
}
$query = query("select * from news where id=".intval($_GET['id']));
if ($query && mysql_num_rows($query)) {
$row = mysql_fetch_assoc($query);
}
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'user', 'pass', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
$stmt = $pdo->prepare('SELECT * FROM news WHERE id = ?');
$stmt->execute([$_GET['id']]);
$row = $stmt->fetch(); // false 或陣列,無需檢查 resource
mysql_* 自 PHP 7.0 移除,舊專案務必規劃遷移。mysql_connect 回傳值)。mysql_error() 具體錯誤碼(如 1064 語法、1146 表不存在)。