1

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

2 回答 2

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->update() 发生了什么,您可以在此处开始跟踪: https ://github.com/ppi/framework/blob/master/PPI/DataSource/PDO/ActiveQuery.php#L127

祝你好运。

保罗·德拉古尼斯。

于 2012-01-02T01:22:29.880 回答
0

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

删除提取,你很高兴。

于 2012-01-01T21:56:52.940 回答