2015-11-03 86 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吗? –