php - MySQL PDO UPDATE 仅在类里面使用时不起作用

标签 php mysql class pdo

在类里面使用 UPDATE 查询时,我遇到了很多麻烦。其他查询如 SELECT、ALTER 工作得很好。查询 itsef 在 phpmyadmin 中运行良好,如果 PDO 以过程方式定义(但与类中完全相同),则完全相同的查询也可以运行。与它斗争了好几天,现在我只是在这里放弃了我的问题。错误报告开启

error_reporting(E_ALL);
ini_set('display_errors', 1);

在创建对象时也将错误报告设置为属性,但不会为 UPDATE 抛出错误。

环境是 Linux Mint 17.3 上的本地主机。工作代码(但不适用于更新):

class MySQLDatabase {
    private $PDO;
    private $error;

    private $host = _DB_SERVER_;
    private $dbname = _DB_NAME_;
    private $user = _DB_USER_;
    private $passwd = _DB_PASSWD_;

    private $stmt;  

    public function __construct(){
        try {
            $this->PDO = new PDO('mysql:host='.$this->host.';dbname='.$this->dbname.';charset=utf8', ''.$this->user.'', ''.$this->passwd.'');
            $this->PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            $this->error = $e->getMessage();
        }
    }
    public function update_records(){

        $query = 'UPDATE ps_2orders
                SET
                    rozliczone = 1
                WHERE
                    id_order = 1535';

        $this->query($query);
        $this->execute();
    }
    public function query($query){
        $this->stmt = $this->PDO->prepare($query);
    }
    public function execute() {
        return $this->stmt->execute();
    }

现在的工作代码:

try {
    $pdo = new PDO('mysql:host='._DB_SERVER_.';dbname='._DB_NAME_.';charset=utf8', ''._DB_USER_.'', ''._DB_PASSWD_.'');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    exit('Database connection error.');
}

$query = $pdo->prepare("UPDATE ps_2orders
                SET
                    rozliczone = 1
                WHERE
                    id_order = 1535");
    $query->execute();

到目前为止我尝试了什么:主要是调整查询但显然它不是导致问题的查询。它必须与对象有关。

如有任何帮助,我们将不胜感激。

最佳答案

$query = 'UPDATE ps_2orders SET rozliczone=:rozliczone WHERE id_order = :id_order';
$stmt = $this->PDO->prepare($query);
$stmt->execute(array(':rozliczone' => 1, ':id_order' => 1535));

这会起作用。 因为你已经制作了 pdo 对象:

$this->PDO = new PDO('mysql:host='.$this->host.';dbname='.$this->dbname.';charset=utf8', ''.$this->user.'', ''.$this->passwd.'');
$this->PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

所以你必须使用$this->PDO->pdoFunctions

关于php - MySQL PDO UPDATE 仅在类里面使用时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34876418/

相关文章:

javascript - 在 JavaScript 类中使用命名空间

php - 如何使用 CodeIgniter 3.x 将 session 数据传递到 CKFinder?

mysql - Active Record 查询/SQL 连接性能不佳

php - Simplexml XPath 异常

mysql - MySQL中每两行select,使用不同的列进行匹配

mysql - 如何更改 MySQL 中的 SHOW GRANTS 标题?

class - 在Flutter中的两个类之间传递变量

java - Java 中类似 JSON 的对象语法

php - php error_log怪异

php - Lighthouse graphql 订阅