运行准备好的语句来更新表行时,我收到'HY000常规错误'。查询似乎运行,并且行已成功更新。我的代码和返回的错误详述如下。如果有人能指出我正确的方向来解决这个问题,我将非常感激。
代码示例:
$query = 'UPDATE users SET active = 1 WHERE email = ? AND activationCode = ?';
$stmt = $this->ds->prepare($query);
$stmt->bindValue(1, $email);
$stmt->bindValue(2, $code);
$stmt->execute();
$row = $stmt->fetch();
错误详情:
File: C:\apache2\htdocs\ppi-framework\Vendor\Doctrine\Doctrine\DBAL\Statement.php
Line: 189
Message: SQLSTATE[HY000]: General error
Code: HY000
答案 0 :(得分:2)
是的,fetch()期望结果来自SELECT,这不是你的查询所执行的。
我建议您使用PPI \ DataSource \ ActiveQuery组件,而不是通过PPI的DataSource组件直接与PDO交互。这将执行相关的PDO代码,这是由Doctrine DBAL(PPI框架正在抽象)执行的。
以下是如何使用PPI的ActiveQuery类的示例。
<?php
namespace App\Model;
class User extends \PPI\DataSource\ActiveQuery {
protected $_meta = array(
'table' => 'users',
'primary' => 'id',
'conn' => 'main' // See your connections.php configuration
);
}
这就是你所需要的一切,现在PPI可以为你完成剩下的工作。要更新查询,您可以执行以下操作:
<?php
$model = new \App\Model\User();
$data = array('active' => 1);
$where = array('email' => 'x', 'activationCode' => 'x');
$result = $model->update($data, $where);
要了解ActiveQuery-&gt; update()的内容,您可以在此处开始跟踪: https://github.com/ppi/framework/blob/master/PPI/DataSource/PDO/ActiveQuery.php#L127
祝你好运。Paul Dragoonis。
答案 1 :(得分:0)
您正在执行更新语句,然后尝试从结果集中获取一行(为空)。这就是你获得例外的地方。
删除抓取,你很高兴。