J'ai une requête (en fait plusieurs requêtes) qui fonctionne parfaitement dans phpmyadmin (j'ai aussi essayé get_var
à la place de get_results
, mais je pense que j'aurais peut-être besoin d'une alternative à $wpdb->prepare
. Comment puis-je l'exécuter simultanément?
function myfunction( $campaign_id = 0 ) {
global $wpdb;
$coupon_code = $wpdb->get_results( $wpdb->prepare( "SET @update_code := 0;
UPDATE " . $wpdb->prefix . "my_table SET status = 1, code = (SELECT @update_code := code)
WHERE campaign_id = %d AND status IS NULL LIMIT 1;
SELECT @update_code as code;
",$campaign_id ) );
return $coupon_code->code;
}
Erreur
WordPress database error You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near
'UPDATE wp_my_table SET status = 1, code = (SELECT @update_code := code)' at line 2
for query: (runs perfectly in phpmyadmin)
SET @update_code := 0;
UPDATE wp_my_table SET status = 1, code = (SELECT @update_code := code)
WHERE campaign_id = 0 AND status IS NULL LIMIT 1;
SELECT @update_code as code;
En dehors des sous-requêtes , MySQL ne traitera qu'une requête à la fois. Lors de l'exécution d'instructions SQL via phpmyadmin, il exécute une requête après l'autre. Pour faire la même chose dans WordPress, il semble que vous n'utilisiez qu'une requête par objet $wpdb
(ceux-ci peuvent avoir des sous-requêtes si vous le souhaitez, mais pas ce qu'il faut ici).