web-dev-qa-db-fra.com

Incrément valeur (valeur = valeur + 1) de $ wpdb-> update

Cette requête SQL

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

Comment puis-je le transformer en instruction $ wpdb-> update ()?

Ex.

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

Vous pas. Pas avec la fonction WPDB update (). La fonction de mise à jour suppose que les valeurs des colonnes sont des chaînes. Vous pouvez remplacer cela avec le paramètre format, mais cela n'autorise que% d,% f et% s (entier, float, chaîne). Il n'autorise pas les opérations sur les colonnes telles que total + 1.

Vous devrez utiliser la fonction query () directement pour effectuer votre mise à jour.

5
Otto

En utilisant la méthode de requête, vous risquez un problème de nettoyage. En utilisant la méthode de mise à jour, vous risquez une condition de concurrence critique. Pour surmonter les deux, juste avant la mise à jour, sélectionnez une option sur la ligne avec la clause finale "FOR UPDATE". Pour récupérer les résultats, vous pouvez utiliser la même condition que celle que vous allez utiliser pour la méthode update et get_row.

Le seul inconvénient est que si votre condition touche plusieurs lignes, il n'y a pas d'autre moyen que d'utiliser la méthode de requête de wpdb.

0
Jiju Thomas Mathew