web-dev-qa-db-fra.com

L'utilisation de $ wpdb génère une erreur de base de données

J'essaie d'afficher le contenu des tables SQL en utilisant l'objet $wpdb. Le problème, c’est que quoi que j’essaie de l’utiliser dans ma requête, il affiche une erreur SQL. Ce que j'ai essayé de faire est un peu plus complexe que ce que je vais vous montrer, mais j'ai progressivement simplifié ma requête pour voir d'où pouvait provenir l'erreur, mais jamais trouvée.

Alors voici ce que j'ai essayé en dernier:

<?php

global $wpdb;
$wpdb->show_errors();
$tableCustom = 'join_users_defis';

$requeteAffichage = $wpdb->get_results('
SELECT * 
FROM $wpdb->postmeta
');

var_dump($requeteAffichage);

?>

Pour moi, il est censé vider le contenu de la table {$table_prefix}_postmeta (j'ai essayé avec d'autres tables), qui est une table WordPress standard. Mais au lieu de cela, il génère l'erreur suivante (grâce à $wpdb->show_errors();):

Erreur de base de données WordPress: [Vous avez une erreur dans votre syntaxe SQL; vérifiez le manuel correspondant à la version de votre serveur MariaDB pour connaître la syntaxe à utiliser près de ->_posts à la ligne 2]

Mon installation actuelle s'exécute localement (XAMPP), avec MariaDB 10.1.16 / Apache / PHP 5.6.24

Pour être sûr, j'ai essayé d'interroger directement avec mon préfixe d'installation WordPress, et cela a fonctionné.

Est-ce un problème avec mon installation ou quelque chose que j'ai manqué? Je pourrais avoir besoin d'aide pour cela.

3
Fl-0

c'est une erreur de syntaxe selon le message d'erreur. des traitements comme ceux ci-dessous pourraient vous convenir.

global $wpdb;
$wpdb->show_errors();
$tableCustom = 'join_users_defis';

$sql = "SELECT * FROM {$wpdb->postmeta}";
$requeteAffichage = $wpdb->get_row( $sql );

//or $requeteAffichage = $wpdb->get_results( $sql );

var_dump($requeteAffichage);
3
Anwer AR

$wpdb-> n'appartient pas à la requête.

Changement

$requeteAffichage = $wpdb->get_results("
SELECT * 
FROM $wpdb->postmeta
");

à

$prefix = $wpdb->prefix;
$postmeta = $prefix . 'postmeta';
$requeteAffichage = $wpdb->get_results("
SELECT * 
FROM $postmeta
");

(ou, si vous utilisez un préfixe de table différent, remplacez-le par wp_.)

1
WebElaine

Vous devez utiliser des littéraux de chaîne entre guillemets doubles pour PHP afin d'interpréter correctement les variables de la chaîne. Changement:

$wpdb->get_results('SELECT * FROM $wpdb->postmeta');

à:

$wpdb->get_results("SELECT * FROM {$wpdb->postmeta}");
1
Yoav Kadosh