更新查询在具有多个where子句的预准备语句中不起作用

问题描述 投票:0回答:1

我有以下更新语句,它确实成功执行但表中没有值更改。

 $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中的一种bug。谢谢

php mysql pdo
1个回答
0
投票

好吧,我没有看到您的代码有任何问题,请尝试验证您的表中的列数是否与您拥有的参数数量相匹配,因为您说当您删除最后一个参数时它是否有效

© www.soinside.com 2019 - 2024. All rights reserved.