Je fais seulement un SELECT sur une table entière - et la table est définie dans une variable:
$table = $wpdb->prefix . 'members';
Dois-je lier un paramètre à cette variable?
Cela a provoqué une erreur:
$result = $wpdb->get_results($wpdb->prepare("SELECT * FROM %s", $table, ARRAY_A));
Mais si je saute le "% s", cela donne aussi une erreur:
$result = $wpdb->get_results($wpdb->prepare("SELECT * FROM $table", ARRAY_A));
Dois-je ignorer "préparer" dans ce cas?
Non, vous ne voulez pas échanger le nom du fichier. Si vous le faites, le nom de la table sera placé entre guillemets et une erreur SQL sera déclenchée. Essayer:
$table = $wpdb->prefix . 'members';
$qry = $wpdb->prepare("SELECT * FROM %s", $table);
var_dump($qry);
$qry = "SELECT * FROM $table";
var_dump($result);
La première chaîne n'est pas valide SQL. La seconde devrait fonctionner à condition que vous ayez une table du nom correct.
prepare()
est conçu pour fonctionner sur les données fournies par l'utilisateur - des données qui pourraient provenir de sources douteuses ayant une intention malveillante. Vous n'avez pas besoin d'échanger des données, comme le nom de votre table, qui ne proviennent pas d'une source douteuse.
Ce que tu veux c'est:
$table = $wpdb->prefix . 'members';
$qry = "SELECT * FROM $table";
$result = $wpdb->get_results($qry, ARRAY_A);
var_dump($result);
À propos, vos parenthèses sont fausses ici (même si le reste a fonctionné):
$result = $wpdb->get_results($wpdb->prepare("SELECT * FROM %s", $table, ARRAY_A));
Le ARRAY_A
est un argument de la prepare
et non du get_results
. Cela devrait être (bien que l'échange de valeur soit faux comme expliqué ci-dessus):
$result = $wpdb->get_results(
$wpdb->prepare("SELECT * FROM %s", $table),
ARRAY_A
);
C'est juste une mauvaise fermeture de fermeture, $wpdb->prepare
ne nécessite que les query string
et query parameters
. Ensuite, sur get_results
, vous pouvez définir le type de résultats dont vous avez besoin, ainsi:
$result = $wpdb->get_results(
$wpdb->prepare( "SELECT * FROM %s", $table ),
ARRAY_A
) or die ( $wpdb->last_error );
Edit: vous pouvez vérifier la dernière erreur SQL $wpdb
en utilisant ce code mis à jour