mysqli_affected_rows 預設回傳「實際修改的行數」,但透過連線參數可切換為「匹配的行數」。兩者在 UPDATE 操作時差異最大:
使用 mysqli_real_connect() 建立連線時,在 flags 參數加入 MYSQLI_CLIENT_FOUND_ROWS:
$link = mysqli_real_connect(
$host, $user, $pass, $db,
3306, NULL, MYSQLI_CLIENT_FOUND_ROWS
);
此後 mysqli_affected_rows($link) 將回傳匹配行數。
| 風格 | 語法 |
|---|---|
| 程序式 | int mysqli_affected_rows ( mysqli $link ) |
| 物件導向 | $mysqli->affected_rows |
<?php
$link = mysqli_connect("localhost", "user", "pass", "world");
if (!$link) { die("連線失敗: " . mysqli_connect_error()); }
/* 建立測試表 */
mysqli_query($link, "CREATE TABLE Language SELECT * FROM CountryLanguage");
printf("INSERT 影響列數: %d\n", mysqli_affected_rows($link));
/* 新增狀態欄位 */
mysqli_query($link, "ALTER TABLE Language ADD Status INT DEFAULT 0");
/* 更新:Percentage > 50 的列 */
mysqli_query($link, "UPDATE Language SET Status=1 WHERE Percentage > 50");
printf("UPDATE 影響列數: %d\n", mysqli_affected_rows($link));
/* 刪除:Percentage < 50 的列 */
mysqli_query($link, "DELETE FROM Language WHERE Percentage < 50");
printf("DELETE 影響列數: %d\n", mysqli_affected_rows($link));
/* SELECT 不影響列數 */
$result = mysqli_query($link, "SELECT CountryCode FROM Language");
printf("SELECT 影響列數: %d\n", mysqli_affected_rows($link)); // 永遠為 -1
mysqli_free_result($result);
mysqli_query($link, "DROP TABLE Language");
mysqli_close($link);
?>
<?php
$mysqli = new mysqli("localhost", "user", "pass", "world");
if (mysqli_connect_errno()) { die("連線失敗: " . mysqli_connect_error()); }
$mysqli->query("CREATE TABLE Language SELECT * FROM CountryLanguage");
printf("INSERT 影響列數: %d\n", $mysqli->affected_rows);
$mysqli->query("ALTER TABLE Language ADD Status INT DEFAULT 0");
$mysqli->query("UPDATE Language SET Status=1 WHERE Percentage > 50");
printf("UPDATE 影響列數: %d\n", $mysqli->affected_rows);
$mysqli->query("DELETE FROM Language WHERE Percentage < 50");
printf("DELETE 影響列數: %d\n", $mysqli->affected_rows);
$result = $mysqli->query("SELECT CountryCode FROM Language");
printf("SELECT 影響列數: %d\n", $mysqli->affected_rows);
$result->close();
$mysqli->query("DROP TABLE Language");
$mysqli->close();
?>
SELECT 查詢永遠回傳 -1,若需取得筆數請用 mysqli_num_rows()INSERT ... VALUES 單筆寫入回傳 1,INSERT ... SELECT 回傳實際新增筆數MYSQLI_CLIENT_FOUND_ROWS 後,UPDATE 若新舊值相同仍計入匹配行數