web-dev-qa-db-ja.com

$ wpdb-> updateの増分値(値=値+ 1)

このSQLクエリ

$wpdb->query("UPDATE log SET total=total+1 WHERE id='1')");

どうやって$ wpdb-> update()文にするの?

例.

$wpdb->update('log', array('total'=>'total+1'), array('id'=>'1'));
2
supersuphot

あなたは違います。 WPDBのupdate()関数とは異なります。更新機能は、列の値がストリングであると想定します。 formatパラメータを使用してこれをオーバーライドできますが、%d、%f、および%s(integer、float、string)しか使用できません。 total + 1のような列に対する操作はできません。

更新するにはquery()関数を直接使用しなければなりません。

5
Otto

クエリメソッドを使用すると、サニタイズの問題が発生する可能性があります。更新方法を使用すると、競合状態になる危険があります。両方を克服するには、更新の直前に、最後の句 "FOR UPDATE"を使用して行にselectを発行します。結果を取得するために、updateおよびget_rowメソッドに使用するのと同じ条件を使用できます。

唯一の注意点は、あなたの条件が複数の行に当たった場合ですが、wpdbのqueryメソッドを使う以外の方法はありません。

0