J'ai créé un plugin avec une nouvelle table (wp_soundcloud
) et je dois récupérer les données de cette nouvelle table avec les données de publication.
Voici ma requête:
$querystr = "
SELECT $wpdb->posts.*,
FROM $wpdb->posts
LEFT JOIN $wpdb->soundcloud ON($wpdb->posts.ID = $wpdb->soundcloud.idpost)
WHERE $wpdb->posts.post_type = 'soundcloud'
AND $wpdb->posts.post_name = '$name'
";
$pageposts = $wpdb->get_results($querystr, OBJECT);
… Et voici le débogage:
["last_query"]=>
string(176) "
SELECT wp_posts.*, .*
FROM wp_posts
LEFT JOIN ON(wp_posts.ID = .idpost)
WHERE wp_posts.post_type = 'soundcloud'
AND wp_posts.post_name = 'test-demo'
"
… Et l'erreur:
["last_error"]=>
string(226) "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 'FROM wp_posts
LEFT JOIN ON(wp_posts.ID = .idpost)
WHERE wp_posts.post_' at line 2"
Le problème est la LEFT JOIN ON(wp_posts.ID = .idpost)
. Mais pourquoi la requête n'a-t-elle pas JOIN
la table?
Ne le laissez pas ouvert aux injections:
global $wpdb;
$all_posts = $wpdb->get_results( $wpdb->prepare(
"
SELECT %s.*
FROM %s
LEFT JOIN %s ON(%s = %s)
WHERE %s = 'soundcloud'
AND %s = '%s'
"
,$wpdb->posts
,$wpdb->posts
,"{$wpdb->prefix}soundcloud"
,$wpdb->posts.ID
,"{$wpdb->prefix}soundcloud.idpost"
,$wpdb->posts.post_type
,$wpdb->posts.post_name
,$name
), OBJECT );
echo '<pre>'.var_export( $all_posts, true ).'</pre>';
$wpdb;
offre le $wpdb->prefix
, qui correspond à tout ce que vous avez défini dans votre wp-config.php
comme préfixe de table. Ajoutez ensuite le nom de votre table: {$wpdb->prefix}{$your_table_name}
ou "{$wpdb->prefix}soundcloud"
.
Votre problème initial est que vous n'avez pas défini la variable $wpdb->soundcloud
.
Votre problème à long terme est que vous avez créé une table séparée en premier lieu. Il n'y a presque jamais de bonne raison de créer votre propre table et, étant donné votre JOIN, vous auriez probablement dû utiliser les fonctions postmeta à la place.