2017-06-24 7 views
3

存在しない、私は私が準備された文なしでクエリ以下のことができ、そしてそれは完全に正常に動作し、これを使用して、この方法()エラーの「name」の

function __construct($host, $user, $pass, $db) { 
    $this->link = pg_connect("host=$host port=5432 dbname=$db user=$user password=$pass") or $this->error(); 
} 

public function run($sql, $args = null) { 
    if(!$args) 
     $this->query = pg_query($sql); 
    else { 
     $v = md5(uniqid(mt_rand(), true)); 
     $this->query = pg_prepare($v, $sql); 
     $this->query = pg_execute($v, $args); 
    } 
    return $this; 
} 

でシンプルなDBクラスを持っています。私は準備を行う際

$db->run(" 
    INSERT INTO userExercise (userid, exerciseid, date, sets) 
    VALUES ($user->id, $exerciseid, '$date', '$sets') 

    ON CONFLICT (userid, date, exerciseid) 
    DO UPDATE SET sets = '$sets' 

    RETURNING LASTVAL()" 
); 

は、しかし、私はエラー「ERROR:プリペアドステートメント 『を取得41982c47c3c84749552cd9808ad03422を一意の名前を与えることをmd5起因する

$db->run(" 
     INSERT INTO userExercise (userid, exerciseid, date, sets) 
     VALUES ($1, $2, $3 $4) 

     ON CONFLICT (userid, date, exerciseid) 
     DO UPDATE SET sets = $4 

     RETURNING LASTVAL()", 
     [$user->id, $exerciseid, $date, $sets] 
    ); 

41982c47c3c84749552cd9808ad03422を』存在しません」。この問題はON CONFLICTにあるようです。どうすればこの問題を解決できますか?

+0

'$ v =" abc "'を設定すると動作しますか? –

+0

同じエラーが発生しました。準備されたステートメント "abc"は存在しません – ditto

答えて

3

pg_prepareの結果を確認していないため、おそらく構文エラーがあります。 VALUES ($1, $2, $3 $4)のように1つ以上のカンマが必要です。

また、は、おそらくRETURNING IDのようなものか、シリアル列が呼び出されたものでなければなりません。さもなければ、あなたは紛争事件のために偽の結果を得るでしょう。

関連する問題