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