Quand je fais ça:
$transients = $wpdb->get_col(
"
SELECT option_name
FROM $wpdb->options
WHERE option_name
LIKE '_transient_wb_tt_%'
"
);
Cela fonctionne bien, mais lorsque je l'utilise, préparez comme suit:
$transients = $wpdb->get_col( $wpdb->prepare(
"
SELECT option_name
FROM %s
WHERE option_name
LIKE '_transient_wb_tt_%'
",
$wpdb->options
) );
Ça ne marche pas, qu'est-ce que je fais mal ici?
Je suis d'accord avec @bainternet. Vous n'avez pas besoin de $wpdb->prepare
. Il n'y a pas de contenu fourni par l'utilisateur.
La réponse à la question est que pour obtenir un caractère générique %
à traverser prepare
, vous devez le doubler dans votre code.
LIKE '_transient_wb_tt_%%'
Essayez ceci ou cela si vous voulez bien examiner la requête générée:
var_dump($wpdb->prepare("
SELECT option_name
FROM %s
WHERE option_name
LIKE '_transient_wb_tt_%%'
",
'abc'));
die;
À part être inutile, utiliser $wpdb->prepare
comme ceci ne fonctionnera pas. Si vous tentez d'utiliser prepare
pour permuter dans le nom du fichier, vous obtiendrez un nom du fichier avec des guillemets. C'est invalide SQL. La requête doit être simple:
SELECT option_name
FROM {$wpdb->options}
WHERE option_name
LIKE '_transient_wb_tt_%%'