web-dev-qa-db-fra.com

Erreur dans la base de données Wordpress - Erreur dans la syntaxe SQL - Je ne peux identifier aucune erreur?

J'essaie d'écrire une fonction qui vérifie si une adresse électronique est stockée dans ma base de données ou non. J'ai écrit le code PHP suivant:

function check_my_users( $email_address ) {
     global $wpdb;
     $my_table_name = $wpdb->prefix . 'my_users';

     $result = $wpdb->get_var( $wpdb->prepare( 'SELECT email FROM %s WHERE email = %s', $my_table_name, $email_address ) );

     if( $result !== NULL )
         return true;

     return false;
 }

La fonction retourne toujours faux. En outre, la requête suivante est imprimée après l'appel de la fonction: SELECT email FROM 'wp_my_users' WHERE email = '[email protected]'.

En outre, les éléments suivants sont écrits dans le journal de débogage:

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 ''wp_my_users' WHERE email = '[email protected]'' at line 1 for query SELECT email FROM 'wp_my_users' WHERE email = '[email protected]' made by […]

(J'ai ajouté les elipsis)

Quel est le problème avec ma fonction, pourquoi est-ce que je reçois cette erreur? Pour moi, tout va bien.

1
Sven

Vous voulez que la requête ressemble à ceci:

SELECT email FROM wp_my_users WHERE email = '[email protected]'

au lieu de cela:

SELECT email FROM 'wp_my_users' WHERE email = '[email protected]'

Alors essayez de construire votre requête avec:

 $sql = "SELECT email FROM {$my_table_name} WHERE email = %s";
 $result = $wpdb->get_var( $wpdb->prepare( $sql, $email_address ) );

où vous n'avez pas besoin d'échapper au nom de la table, car elle l'a construite de manière sécurisée.

2
birgire