2015-11-03 69 views
0

我遇到了一個奇怪的行爲,我無法在數據庫中成功更新所有行。PHP:mySQL:無法更新數據庫中的所有行。表正在部分更新

我有一個PHP網頁,顯示從MYSQL中獲取它後的一些數據。該網頁還爲用戶提供了靈活性以進行任何編輯,並且在進行更改並單擊「更新」按鈕後,文本框中的值將在數據庫中更新。 我得到的問題是,只有前60行正在更新,而不是全部177.

這是一個小型網頁,具有用戶進行更新後的值。可以說,用戶更新了Rihaana給Eminem。

ID  FieldText 
01  Slim Shady 
02  Dr. Dre 
05  Rihaana -->> 'Eminem' 

使用AJAX,我已經將json文件發送到php文件,我在這裏提取值並在數據庫中更新它。 我的JSON看起來像:

array(2) { 
["fieldText"]=> 
array(177) { 
[0]=> 
string(55) "Slim Shady" 
[1]=> 
string(24) "Dr Dre" 
[2]=> 
string(27) "Eminem" 
} 
["ID"]=> 
array(177) { 
[0]=> 
string(1) "1" 
[1]=> 
string(1) "2" 
[2]=> 
string(1) "5" 
}} 

生成的JSON是有效的。 JSON的實際長度爲

一旦JSON被髮送到PHP文件,我分裂JSON代碼到2個陣列和長度兩個陣列中的177

現在我下一步是爲每個ID,我正在獲取字段文本,並希望在數據庫中更新它。現在

$jsonData = json_decode($_POST['postData'],true); 
$length = count($jsonData['ID']); ## The length is 177 in my json 
$ID = $jsonData['ID']; ## The length is 177 in my json 
$fieldText = $jsonData['fieldText']; ## The length is 177 in my json 

,用下面的代碼,我使用的循環更新所有的值的行中,但這種循環運行60次迭代不僅沒有177(預期):

for($j=0; $j< count($jsonData['ID']); $j++) { 

$langText = $fieldText[$j]; 
$id = (int) $ID[$j]; 

$update = "UPDATE languageUpdate SET fieldText = '$langText' 
       WHERE ID = $id"; 
       //echo "$update"; 
$mysqli->query($update) or die(mysql_error());}} 

我試着做調試,但無法做到。有人可以幫忙嗎?

+0

嘗試在for循環 –

+0

我這樣做,以及更換「計數($ jsonData [‘ID’])」與「$長度」,但不工作 – user4943236

+0

你能解釋你如何知道只有60次迭代? –

回答

1

如果您有177個項目,問題在於查詢,而不是循環。它可能會失敗,然後去聲明。

顯示$update並檢查最後一個失敗之前(但你應該能夠通過查看mysql_error())找到錯誤。 我的猜測是你在$langText或任何其他不好的人物有一個簡單的報價。 逃生您的變量,這是一個很好的做法:

$update = "UPDATE languageUpdate 
SET fieldText = '".$mysqli->real_escape_string($langText)."' 
WHERE ID = $id"; 
+0

讓我檢查並回復您 – user4943236

+0

我注意到如果通過使用insert into語句運行查詢;所有行都成功更新。但如果我使用php運行它,爲什麼它會死亡?這種行爲是否正常? – user4943236

+0

您是否顯示最後一次查詢失敗之前調用?你可以給我這個時候使用的$ langText嗎? –