首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP mysqli::query() 回傳值類型深度解析

     編輯:PHP 綜合知識

核心結論

`mysqli::query()` 回傳值取決於 SQL 類型與執行結果:

SQL 類型成功失敗
SELECT / SHOW / DESC / EXPLAIN (有結果集)mysqli_result 物件false
INSERT / UPDATE / DELETE / REPLACE (無結果集)truefalse

實測程式碼與輸出

$link = new mysqli('localhost', 'root', '123', 'test');

// 1. 正確 SELECT
$a = $link->query("SELECT uName FROM userInfo");
var_dump($a); // object(mysqli_result)#2 (0) { }

// 2. 正確 INSERT
$b = $link->query("INSERT INTO userInfo VALUES('hh','22')");
var_dump($b); // bool(true)

// 3. 錯誤 SELECT (欄位不存在)
$c = $link->query("SELECT uN FROM userInfo");
var_dump($c); // bool(false)

// 4. 錯誤 INSERT (主鍵重複等)
$d = $link->query("INSERT INTO userInfo VALUES('','hh','22')");
var_dump($d); // bool(false)

判斷邏輯最佳實務

$result = $mysqli->query($sql);

if ($result === false) {
    // SQL 執行錯誤 (語法錯誤、鍵衝突、權限不足...)
    error_log("SQL Error: {$mysqli->error} | SQL: {$sql}");
    return false;
}

if ($result instanceof mysqli_result) {
    // 有結果集 (SELECT 類)
    $rows = $result->fetch_all(MYSQLI_ASSOC);
    $result->free();
    return $rows;
}

// 回傳 true (INSERT/UPDATE/DELETE 成功)
return $mysqli->affected_rows; // 可進一步取得影響行數

常見誤區

  • 誤以為 `INSERT` 成功會回傳 `mysqli_result` 物件。
  • 直接 `if ($result)` 判斷,忽略 `affected_rows` 為 0 (資料未實際變更) 的情況。
  • 未檢查 `$mysqli->error` 導致除錯困難。

擴展:預備語句 `prepare()` 差異

`$stmt->execute()` 永遠回傳 `bool`,結果集需透過 `$stmt->get_result()` 取得 `mysqli_result`,或使用 `bind_result()` 綁定變數。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved