2016-10-01 5 views
0

したがって、準備済みの文を使用する必要があります。それ以外のエラーが発生します。php + sqllite3:IS NULL/IS NOT NULLを使用すると、プリペアドアップデートバインディングによるエラーが発生する

私はなぜ知らないが、このような、同時に2枚の更新書類を作成することができませんでした:

$sql_update_users =<<<EOF 
    UPDATE users SET username = :username, full_name = :full_name, is_private = :is_private , is_following = 3 , updated_on = :time WHERE user_id = :usernameId; 

    UPDATE users SET following_on = IfNull(following_on, :time) WHERE user_id = :usernameId; 
EOF; 

//Datei für update preparen 
$smt2 = $db->prepare($sql_update_users); 

//bindings... 
//execute... 

^は動作しないでしょう.... :(

私はそれらsepperateする必要がありました:。

//preper update 
$smt2 = $db->prepare("UPDATE users SET following_on = :time WHERE user_id = :usernameId, following_on IS NULL"); 

$smt2->bindParam(':usernameId', $usernameId); 
$smt2->bindParam(':time', $time); 

$smt2->execute(); 

^これは、エラーがスローされますがそれはまた問題だったので、私はすでに「」「AND」に置き換え

。ブール

上のメンバ関数bindParam(へ

コールは)しかし、これは動作します:

$smt2 = $db->prepare("UPDATE users SET following_on = IfNull(following_on, :time) WHERE user_id = :usernameId"); 

^これは動作します。 問題は、行のNULLおよびNOT NULLに複数のエントリがある場合、列を更新する必要があることです。私は "IS NULL"と "IS NOT NULL"を使用するときにエラーが発生するので、何をすべきか分かりません。

EDIT1

だから私は、なぜ、知って覚えて "AND" は動作しません。ので、この行は(エラーが、ただ何もしない)動作しません。

UPDATE users SET was_follower = :sync_id AND unfollowed_me_on = :time 

は、この行は動作します:

UPDATE users SET was_follower = :sync_id, unfollowed_me_on = :time 

ので、私は仕事をする「AND」し、解決策を必要とする、または使用するためのソリューションがNULLで、とNULLではない「」このクエリで

+0

エラーが発生した場合、 'prepare'は' false'を返します。そしてエラーはコンマです。 ANDをなぜ取り除いたのですか? –

+0

@ CL。 「AND」がうまくいかない理由を覚えています。私のEDIT1を参照してください:) – aragonthebest

答えて

0
UPDATE users SET following_on = :time WHERE user_id = :usernameId, following_on IS NULL 

、カンマでなければなりません。

このクエリで
UPDATE users SET was_follower = :sync_id AND unfollowed_me_on = :time 

、AND(unfollowed_me_onを更新する行を決定した場合)、コンマ(、あなたがunfollowed_me_onを変更する場合)またはWHEREでなければなりません。

+0

ありがとう、私はなぜか分からないが、それは知っている働いている:D – aragonthebest

関連する問題