在类里面使用 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/