繁体   English   中英

PHP MySql-更新未更新

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM