[英]PHP MySql - Update is not updating
我的更新查询有问题。 它不会显示任何语法错误,但是也不会更新数据库。
// SQL
$sql = 'UPDATE pizza_info
SET name = :name, price = :price
WHERE id = :id';
try{
$update = $db->prepare($sql);
$update->execute(array(':name' => $this->name, ':price' => $this->price, ':id' => $this->id));
if($update->rowCount() != 1){
throw new PDOException('No row changed');
}
}catch(PDOException $e){
print "Error!: " . $e->getMessage() . "<br/>";
ErrorPages::generalError();
die();
}
但是,如果我尝试将相同的值直接放入sql中,如下所示:
// SQL
$sql = 'UPDATE pizza_info
SET name = "Test", price = "55"
WHERE id = 1';
try{
$update = $db->prepare($sql);
$update->execute();
if($update->rowCount() != 1){
throw new PDOException('No row changed');
}
}catch(PDOException $e){
print "Error!: " . $e->getMessage() . "<br/>";
ErrorPages::generalError();
die();
}
第一种方法可以在另一个查询中运行,并且可以很好地进行更新,但是在这种情况下则不能。 我尝试调试它,但找不到任何东西。
有人有想法,哪里可能有问题? 谢谢。
我认为您缺少准备好的陈述的意义。 这些值不应直接放在字符串中,而应与bind_param函数绑定。 这样,即使您使用直接POST注入,查询也将始终是安全的:
$sql = 'UPDATE pizza_info
SET name = :name, price = :price
WHERE id = :id';
$update = $db->prepare($sql);
$update->execute(array(':name'=>'Test',':price'=>55,':id'=>1));
查看有关执行的文档http://php.net/manual/zh/pdostatement.execute.php
我的完整代码可供参考:
<?php
$db = new PDO('mysql:host=localhost;dbname=test', 'root', 'root');
// SQL
$sql = 'UPDATE pizza_info
SET name = :name, price = :price
WHERE id = :id';
try{
$update = $db->prepare($sql);
$update->execute(array(':name' => 'Test', ':price' => 55, ':id' => 1));
echo $update->rowCount();
if($update->rowCount() != 1){
throw new PDOException('No row changed');
}
}catch(PDOException $e){
print "Error!: " . $e->getMessage() . "<br/>";
ErrorPages::generalError();
die();
}
用下面的数据库表:
CREATE TABLE `pizza_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`price` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
INSERT INTO `pizza_info` (`id`, `name`, `price`) VALUES
(1, 'a', 1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.