2013-01-13 38 views
1

我發現使用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列呢?

+1

你的查詢沒有什麼問題,它在我的機器上工作良好,是的,它會更新所有列的第二個名字是'東西' – Afsar

+0

它真的是'測試','你用來測試什麼'? – hek2mgl

+0

@ hek2mgl - 是的,表名是「test」,last_name列的值是「something」。我創建了這個表只是爲了運行簡單的測試,因爲問題與其他表發生。正如我所說的,並非所有的last_name行值都是「某些東西」。我有一臺運行XAMPP的本地機器,查詢工作正常。 – rbruhn

回答

1

我讓服務器技術人員將我的服務器更新到MySql 5.5,現在問題已修復。我猜它與庫或MySql安裝有關。

+0

奇怪的行爲。我很快就會做一個測試。感謝您發佈答案。 – hek2mgl

+0

任何人有任何想法?我試圖阻止將整個服務器升級到PHP 5.5 –