【问题标题】:wpdb query gives back a wrong resultwpdb 查询返回错误结果
【发布时间】: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()
  • 我知道,我只是这样写的,所以你们不必解密声明。让大家更容易阅读

标签: php sql wordpress


【解决方案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.

【讨论】:

    猜你喜欢
    • 2018-10-29
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 2015-02-24
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多