我發現使用mysqli的預備更新正在更新我的表中的所有行而不是WHERE子句中引用的那一行。我很難理解這種情況。我使用下面的簡化代碼作爲測試運行,並且它仍然發生。我使用PHP 5.3.18和客戶端API庫版本5.0.96。php和mysqli準備的更新正在更新所有行
$mysqli = new mysqli("localhost", "user", "pass", "db");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = "UPDATE test SET first_name = ? WHERE last_name = ?";
if(!$stmt = $mysqli->prepare($query)) {
die("Unable to prepare<br />");
}
$first = 'test';
$second = 'something';
$stmt->bind_param("ss", $first, $second);
if (!$stmt->execute()) {
die("Could not execute<br />");
}
echo "done";
查詢執行,但first_name更新表中的所有行。是的,有一個姓氏與「東西」。不,其他三個測試行沒有last_name = something。 這是圖書館的錯誤嗎?我的PHP配置?也許睡眠不夠?什麼?
哦...另外...如果我使用類似 的查詢「UPDATE test SET first_name =?WHERE id =?」 並更新參數使用一個ID,它的工作原理。它只更新單行。那麼爲什麼我不能在WHERE子句中使用last_name列呢?
你的查詢沒有什麼問題,它在我的機器上工作良好,是的,它會更新所有列的第二個名字是'東西' – Afsar
它真的是'測試','你用來測試什麼'? – hek2mgl
@ hek2mgl - 是的,表名是「test」,last_name列的值是「something」。我創建了這個表只是爲了運行簡單的測試,因爲問題與其他表發生。正如我所說的,並非所有的last_name行值都是「某些東西」。我有一臺運行XAMPP的本地機器,查詢工作正常。 – rbruhn