web-dev-qa-db-fra.com

Puis-je exécuter plusieurs requêtes avec $ wpdb-> prepare?

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;
1
webaholik

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).

0
webaholik