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 コンポーネントを介して PDO と直接対話するのではなく、PPI\DataSource\ActiveQuery コンポーネントを使用することをお勧めします。これは内部で関連する 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

update ステートメントを実行してから、結果セット (空) から行を取得しようとしています。ここで例外が発生します。

フェッチを削除すると、準備完了です。

于 2012-01-01T21:56:52.940 に答える