更新查询不适用于具有多个where子句的准备好的语句

时间:2019-02-15 18:07:26

标签: php mysql pdo

我有以下更新语句,该语句可以成功执行,但表中的值没有变化。

 $name = "John Doe"; //to update into John Stack
 $chenna = "Mz"; $reg = 25; $km = 3;
 $dbh = PDO Object

 $stmt = $dbh->prepare("UPDATE `hl_customer` SET `name`=:hming, `address`=:chenna
         WHERE `regd`=:regd AND `kum`=:km");
 $stmt->bindParam(':hming', $name, PDO::PARAM_STR);
 $stmt->bindParam(':chenna', $hmun, PDO::PARAM_STR);
 $stmt->bindParam(':regd', $reg, PDO::PARAM_INT);
 $stmt->bindParam(':km', $km, PDO::PARAM_INT);
 $stmt->execute();
 $affected = $stmt->rowCount();

另一个经过测试的代码:

 $stmt = $dbh->prepare("UPDATE `hl_customer` SET `name`=?, `address`=?
         WHERE `regd`=? AND `kum`=?");
 $stmt->execute([$name, $hmun, $reg, $km]);
 $affected = $stmt->rowCount();

 $stmt = $dbh->query("UPDATE `hl_customer` SET `name`='$name', `address`='$chenna'
         WHERE `regd`='$reg' AND `kum`='$km'");

为了进行更新,我不断更改$name变量,但没有受影响的行。行计数始终返回0。我在phpmyadmin(最新版本)和mysql Workbench(最新版本)中都进行了测试,但问题仍然存在。然后,我再次在mysql控制台中进行了测试,它可以按预期工作。但是,为什么在上面显示的代码phpmyadmin和workbench中它不起作用。可能是什么问题呢?我的代码错了吗?我使用的是mysql 8.0.12,php 5.6。*和php 7.1。*。 我确实在没有参数化查询的情况下再次对其进行了测试,但仍然无法正常工作。现在,我开始认为这是php中的一种错误。 谢谢

1 个答案:

答案 0 :(得分:0)

好吧,我没有看到您的代码有什么问题,请尝试验证表中的列数是否与您拥有的参数数匹配,因为您说在删除最后一个参数时它就起作用了