在PPI框架中使用Doctrine DBAL的PDO一般错误

时间:2012-01-01 21:47:35

标签: php doctrine pdo dbal ppi

运行准备好的语句来更新表行时,我收到'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

2 个答案:

答案 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)

您正在执行更新语句,然后尝试从结果集中获取一行(为空)。这就是你获得例外的地方。

删除抓取,你很高兴。