MySQL PDO UPDATE仅在课堂上使用时才起作用

时间:2016-01-19 12:07:15

标签: php mysql class pdo

在课堂上使用UPDATE查询时我很挣扎。其他查询,如SELECT,ALTER工作得很好。查询itsef在phpmyadmin中工作得很好,如果PDO是以程序方式定义的(但与类完全相同),则查询工作正常。苦苦挣扎了几天,现在我只是放弃了我的问题。错误报告已开启

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

此外,错误报告在创建对象时设置为属性,但没有为UPDATE抛出错误。

Linux Mint 17.3上的环境是localhost。工作代码(但不是UPDATE):

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();

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

$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