在$ wpdb查询中传递PHP变量

时间:2015-09-03 15:09:47

标签: php mysql wordpress wpdb

我的数据库中有一个名为wp_q33uds_campaign的表。我的申请中有一个查询如下:

$usr = $wpdb->get_var('SELECT user_id FROM wp_q33uds_campaign WHERE date1 = 1451546940');

现在,此查询会从表中返回user_iddate1列设置为1451546940

现在,在我的应用程序的某个地方,我有一个名为$dd的变量,其中$dd设置为1451546940。但是,当我按如下方式修改上述查询时:

$usr = $wpdb->get_var('SELECT user_id FROM wp_q33uds_campaign WHERE date1 = $dd);

它返回NULL值。这里看起来有什么不对?有没有办法在$wpdb查询中传递PHP变量?

4 个答案:

答案 0 :(得分:2)

您应该使用edit: function (e) { var model = e.model; if (model.Local) { model.set("OperationContext", "IsAdded"); } } 方法正确转义变量以防止语法错误,最重要的是防止SQL注入攻击 - 请参阅WordPress文档中的Running General Queries。您还应该使用$wpdb->prepare()属性来确保查询中的正确表格前缀。

您在日期中看到的值实际上是Unix时间戳,您需要使用$wpdb->prefix将其转换为字符串;

date()

答案 1 :(得分:1)

使用

$usr = $wpdb->get_var("SELECT user_id FROM wp_q33uds_campaign WHERE date1 = '$dd'");

$usr = $wpdb->get_var('SELECT user_id FROM wp_q33uds_campaign WHERE date1 = \''.$dd.'\'');

答案 2 :(得分:0)

首先,您错过了近距离报价。

其次,当你使用单引号时PHP取字符串内的字符串,所以你的$ dd不用作变量用作字符串。

有很多方法可以解决这个问题。

$usr = $wpdb->get_var("SELECT user_id FROM wp_q33uds_campaign WHERE date1 = $dd");

或者

$usr = $wpdb->get_var('SELECT user_id FROM wp_q33uds_campaign WHERE date1 = ' . $dd);

最好的方法是使用sprintf http://php.net/manual/en/function.sprintf.php

$sql = sprintf( 'SELECT user_id FROM wp_q33uds_campaign WHERE date1=%s', $dd);
$usr = $wpdb->get_var($sql);

答案 3 :(得分:-1)

如果要评估PHP var,则需要使用双引号。否则你需要像你的

那样用你的字符串连接你的var
$usr = $wpdb->get_var('SELECT user_id FROM wp_q33uds_campaign WHERE date1 = ' . $dd);