<?php
function fetch_array($query, $result_type = MYSQL_ASSOC) {
return mysql_fetch_array($query, $result_type); // 報錯行
}
// 錯誤呼叫
$result = mysql_query("SELECT * FROM users WHERE id = 999"); // 查無資料回傳 false
fetch_array($result); // 傳入 false 而非 resource
錯誤訊息:Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given
mysql_query() 失敗(SQL 錯誤、查無資料、連線中斷)時回傳 false (boolean)mysql_fetch_array()mysql_fetch_array() 要求第一參數為 resource 型別function fetch_array($query, $result_type = MYSQL_ASSOC) {
return @mysql_fetch_array($query, $result_type);
}
// 呼叫端仍需檢查回傳值是否為 false
function fetch_array($query, $result_type = MYSQL_ASSOC) {
if (!is_resource($query)) {
trigger_error('mysql_query 回傳非 resource,可能 SQL 失敗', E_USER_WARNING);
return false;
}
return mysql_fetch_array($query, $result_type);
}
<?php
// 1. 執行查詢並檢查
$result = mysql_query($sql);
if (!$result) {
// 記錄錯誤:SQL、錯誤碼、錯誤訊息
error_log("SQL Error: " . mysql_error() . " | SQL: $sql");
// 回傳空陣列或拋出例外
return [];
}
// 2. 正常處理資料
$data = [];
while ($row = mysql_fetch_assoc($result)) {
$data[] = $row;
}
mysql_free_result($result);
return $data;
<?php
// PDO 範例(推薦)
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8mb4', 'user', 'pass');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
$stmt = $pdo->query("SELECT * FROM users WHERE id = 999");
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 查無資料回傳空陣列,不會報錯
} catch (PDOException $e) {
error_log("DB Error: " . $e->getMessage());
$rows = [];
}
mysql_query() 回傳值有檢查?