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-&gt;prepare() 的正确方法。为了让它做应该做的事情,你应该像这样使用它:$wpdb-&gt;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 查询出错 [重复]

将显示一行的 wpdb 查询结果转换为单个变量(如果重要,请使用简码)

$wpdb->插入不工作。没有错误信息

wpdb::prepare() 错误缺少参数 2