PHP:mySQL:无法更新数据库中的所有行。表正在部分更新

标签 php html mysql

我遇到了一种奇怪的行为,我无法成功更新数据库中的所有行。

我有一个 PHP 网页,从 MYSQL 获取数据后显示一些数据。该网页还为用户提供了进行任何编辑的灵 active ,进行更改并单击“更新”按钮后,文本框中的值将在数据库中更新。 我遇到的问题是仅更新前 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,我正在获取字段文本并希望在数据库中更新它。

$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());}}

我尝试进行调试,但无法做到这一点。有人可以帮忙吗?

最佳答案

如果有 177 个项目,则问题出在查询上,而不是循环上。它可能会失败,然后转到 die 语句。

显示$update并检查失败前的最后一个(但您应该能够通过查看mysql_error()找到错误)。 我的猜测是您在 $langText 或任何其他不良字符中有一个简单的引号。 转义变量,这是一个很好的做法:

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

关于PHP:mySQL:无法更新数据库中的所有行。表正在部分更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33497927/

相关文章:

php - 使用 PHP 或 Javascript 连接 HTML 字符串

php - 在 CodeIgniter 中设置一般表单验证错误

c# - 如何包装H1标签的内容

javascript - 仅克隆并 insertAfter 一次

MySql - 将相同的唯一约束应用于两个不同的字段组合

php - 提取最后5个产品mysql

javascript - 仅在电子邮件中包含已回答的表格问题

html - 多行表格不适用于 HTML 中的表单

php - mysql 和 php - 一次选择获得 3 个或更多表?

mysql BETWEEN 对字符的权利是独占的吗?