2012-01-01 8 views
1

テーブル行を更新するために準備された文を実行すると、 'HY000一般エラー'が表示されます。クエリが実行され、行が正常に更新されます。私のコードと返されるエラーは以下の通りです。誰かがこの問題を解決するために正しい方向に私を指すことができるなら、私は非常に感謝します。PDOの一般的なエラーPPIフレームワークでDoctine DBALを使用する

コード例:

$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

はい、fetch()は、クエリから実行されていないSELECTからの結果を期待しています。

私は、PPIのDataSourceコンポーネントを使って、PPI \ DataSource \ ActiveQueryコンポーネントを使用して、PDOと直接対話するのではなく、お勧めします。これはDoctrine DBAL(PPIフレームワークは抽象化している)によって実行されている適切なPDOコードをフードの下で実行します。

以下は、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 
    ); 
} 

これですべての必要なものは、残りの部分を処理することができます。あなたが行うことができますクエリ更新するには:ActiveQuery-で何が起こっているかを確認するには

<?php 
$model = new \App\Model\User(); 
$data = array('active' => 1); 
$where = array('email' => 'x', 'activationCode' => 'x'); 
$result = $model->update($data, $where); 

>を更新()あなたはここでトレースを開始することができます https://github.com/ppi/framework/blob/master/PPI/DataSource/PDO/ActiveQuery.php#L127

幸運を。

Paul Dragoonis。

0

あなたは結果セット(つまり空である)から行をフェッチしようとし、その後、更新ステートメントを実行しています。それが例外を得る場所です。

フェッチを削除して、あなたはいいですね。

+0

ありがとう、Maerlyn。第2の目のセットはすべての違いをもたらす。私は$ stmt-> rowCount()を呼び出していたはずです。 – BenTheDesigner

関連する問題