我遇到了一种奇怪的行为,我无法在数据库中成功更新所有行。
我有一个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的实际长度为 177
将json发送到php文件后,我将json代码拆分为2个数组,两个数组的长度为177。
现在我接下来要做的就是每个ID,我提取字段Text并希望在数据库中更新它。
$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
现在,使用下面的代码,我使用for循环更新行中的所有值,但是此循环仅运行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 :(得分:1)
如果您有177个项目,问题在于查询,而不是循环。它可能会失败,然后转到 die 语句。
显示$update
并在失败前检查最后一个(但您应该能够通过查看mysql_error()来查找错误)。
我的猜测是你在$langText
或其他任何不良角色都有一个简单的引用。
逃避你的变量,这是一个很好的做法:
$update = "UPDATE languageUpdate
SET fieldText = '".$mysqli->real_escape_string($langText)."'
WHERE ID = $id";