web-dev-qa-db-fra.com

Impossible de passer de table à $ wpdb-> prepare

Je ne parviens pas à passer une variable de table à $ wpdb-> prepare (); Voici le code de fonctionnement:

$table = $wpdb->get_blog_prefix( $blog_id ) . 'my_table';

$voters = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table WHERE user_id= %d AND post_id = %d;", $user_ID, $post->ID  ));

Cela fonctionne très bien. Cependant, je pense que je devrais également inclure mon tableau dans la déclaration de préparation. Mais ça casse quand je le change en ceci:

$table = $wpdb->get_blog_prefix( $blog_id ) . 'my_table';

$voters = $wpdb->get_row($wpdb->prepare("SELECT * FROM %s WHERE user_id= %d AND post_id = %d;", $table, $user_ID, $post->ID  ));

Des idées sur pourquoi il pourrait se casser?

2
Nick Budden

La méthode prepare () échappe à% s. Le deuxième élément de code que vous avez répertorié se rompt car les guillemets sont ajoutés au nom de la table et ne correspondent donc pas à ceux de la base de données.

Le premier morceau de code fonctionne, car il s'agit d'un remplacement de chaîne simple qui correspond donc au nom de la table dans la base de données.

Quel est le message d'erreur que vous recevez?

HTH

3
rexposadas

vous devez enregistrer la table avec la classe $ wpdb pour pouvoir utiliser quelque chose comme:

$table = $_POST['table'];
$res = $wpdb->get_results($wpdb->prepare("
SELECT * FROM {$wpdb->my_custom_table}
WHERE user_id= %d AND post_id = %d;",
array($user_ID, $post->ID  )
);

Voici un lien vers la fonction Nice, qui, lorsqu'il est appelé dans init, créera votre table s'il n'existe pas, mais l'enregistrera toujours sous le nom de votre choix

http://snipplr.com/view/52178/

C’est le code important dont vous avez besoin dans cette fonction, (édité un peu par moi) pour ceux qui sont intéressés par ça:

//include the wordpress db functions
require_once(ABSPATH . 'wp-admin/upgrade-functions.php');
dbDelta($sql);

    if (!isset($wpdb->custom)) $wpdb->custom = new stdClass();
    //add the shortcut so you can use $wpdb->custom->my_table
    $wpdb->custom->$search_table = $search_table;
    $wpdb->tables[] = str_replace($wpdb->prefix, '', $search_table);
0
Daithí