展示使用 MySQLi 物件風格執行 INSERT 操作並檢查影響行數的最小可行代碼。注意:實際生產環境**必須使用預處理語句**防止 SQL 注入,此處僅示範 API 基礎用法。
<?php
// 假設 $mysqli 已成功連接:new mysqli('localhost', 'user', 'pass', 'db')
$query = "INSERT INTO chinachaodai (name, theindex) VALUES ('公司', '1')";
$result = $mysqli->query($query);
if ($result) {
echo "返回行數: " . $mysqli->affected_rows; // 成功插入返回 1
} else {
echo "失敗了: " . $mysqli->error; // 顯示具體錯誤訊息
}
$mysqli->close();
?>
| 屬性/方法 | 說明 |
|---|---|
| $mysqli->query($sql) | 執行單條 SQL,成功返回 mysqli_result (SELECT) 或 true (INSERT/UPDATE/DELETE),失敗返回 false |
| $mysqli->affected_rows | 上一條 INSERT/UPDATE/DELETE/REPLACE 影響的行數 |
| $mysqli->insert_id | 上一條 INSERT 自增 ID(若表有 AUTO_INCREMENT) |
| $mysqli->error | 最近一次函數調用的錯誤訊息字串 |
| $mysqli->errno | 最近一次函數調用的錯誤代碼 |
<?php
// 正確姿勢:預處理 + 參數綁定,徹底防 SQL 注入
$stmt = $mysqli->prepare("INSERT INTO chinachaodai (name, theindex) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $index); // "s"=string, "i"=integer, "d"=double, "b"=blob
$name = '公司';
$index = '1';
$stmt->execute();
echo "影響行數: " . $stmt->affected_rows;
echo "新 ID: " . $stmt->insert_id;
$stmt->close();
?>
affected_rows 返回 -1:SQL 語法錯誤或執行失敗,檢查 $mysqli->error。Duplicate entry '...' for key 'PRIMARY':主鍵/唯一鍵衝突。Field 'xxx' doesn't have a default value:非空欄位未提供值且無預設值(嚴格 SQL 模式下)。$mysqli->set_charset('utf8mb4')、表/欄位字符集為 utf8mb4、PHP 檔案編碼為 UTF-8 無 BOM。