wpdb 查询返回错误结果
Posted
技术标签:
【中文标题】wpdb 查询返回错误结果【英文标题】:wpdb query gives back a wrong result 【发布时间】:2021-05-04 12:31:24 【问题描述】:我在我的 WordPress 页面上的 php sn-p 中编写了一些代码,而 wpdb 查询总是给我一个错误的结果。
在 WordPress 中
$column07a = $_POST[$attributes[8]]; **<-** echo displayed **24253**
$queryColumn07 = $wpdb->prepare( " SELECT DISTINCT p.id
FROM plz p
LEFT JOIN vermieter v ON v.id_plz=p.id
WHERE p.postleitzahl='$column07a' " );`
$column07 = $wpdb->query( $queryColumn07 ); **<-** echo displayed **1**
在 SQL 中
SELECT DISTINCT p.id
FROM plz p
LEFT JOIN vermieter v ON v.id_plz=p.id
WHERE p.postleitzahl='24253';
phpmyadmin 显示 3 这是该查询的正确结果
我做错了什么?你能帮我吗?
【问题讨论】:
当您运行查询$queryColumn08
时,这是否定义在其他地方,因为前一行是针对 $queryColumn07
。
对不起,我纠正了我的拼写错误。
旁注:这不是使用$wpdb->prepare()
的正确方法。为了让它做应该做的事情,你应该像这样使用它:$wpdb->prepare( " SELECT DISTINCT p.id FROM plz p LEFT JOIN vermieter v ON v.id_plz=p.id WHERE p.postleitzahl=%s ", $column07a );
。您现在拥有它的方式使您容易受到 SQL 注入攻击。有关详细信息,请参阅wpdb::prepare()。
我知道,我只是这样写的,所以你们不必解密声明。让大家更容易阅读
【参考方案1】:
您得到1
的原因是因为您使用的是query()
方法而不是get_results() 或get_var()。
来自$wpdb::query() 文档:
返回:
(int|bool) Boolean true 用于 CREATE、ALTER、TRUNCATE 和 DROP 查询。 所有其他查询受影响/选择的行数。错误时的布尔值 false。
(强调我的。)
所以,当你运行这个时:
$column07 = $wpdb->query( $queryColumn07 );
您得到1
,因为query()
正在返回您的SELECT
查询找到的行数。
在您的具体情况下,如前所述,您希望使用 get_var() 来获取查询返回的实际 ID:
$column07 = $wpdb->get_var( $queryColumn07 );
echo $column07; // Should output 3 according to your comments.
【讨论】:
以上是关于wpdb 查询返回错误结果的主要内容,如果未能解决你的问题,请参考以下文章
Wordpress:500 内部服务器错误,可能是使用 $wpdb 的问题
使用变量时的 Wordpress 数据库查询 ($wpdb) 错误
使用 $wpdb get_results 的 WordPress 查询出错 [重复]