`mysqli::query()` 回傳值取決於 SQL 類型與執行結果:
| SQL 類型 | 成功 | 失敗 |
|---|---|---|
| SELECT / SHOW / DESC / EXPLAIN (有結果集) | mysqli_result 物件 | false |
| INSERT / UPDATE / DELETE / REPLACE (無結果集) | true | false |
$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; // 可進一步取得影響行數
`$stmt->execute()` 永遠回傳 `bool`,結果集需透過 `$stmt->get_result()` 取得 `mysqli_result`,或使用 `bind_result()` 綁定變數。