したがって、準備済みの文を使用する必要があります。それ以外のエラーが発生します。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ではない「」このクエリで
エラーが発生した場合、 'prepare'は' false'を返します。そしてエラーはコンマです。 ANDをなぜ取り除いたのですか? –
@ CL。 「AND」がうまくいかない理由を覚えています。私のEDIT1を参照してください:) – aragonthebest