我正在尝试调试一个SQL查询,但在像这样运行查询之前,我得到了很多@r和其他不需要的字符:
print_r($query); die;
$rows = $wpdb->get_results($query);
我得到:
SELECT @r:= CASE WHEN value < 60000 THEN 10000 WHEN value >= 60000 AND value < 100000 THEN 20000 WHEN value >= 100000 THEN 100000 END r, (floor((wpp.value) / @r) * @r) minvalue, ((floor((wpp.value + @r) / @r) * @r) - 1) maxvalue, COUNT(*) `count` FROM wp_posts INNER JOIN wp_product wpp ON wpp.post_id = wp_posts.ID AND ( wpp.location IN (\'15652\') AND (deleted = 0 OR ( deleted = 1 AND ( wpp.value >= 85000 AND wpp.deleteddate >= (DATE_SUB(CURDATE(), INTERVAL 6 MONTH)) ) ) ) ) AND (0 OR (wpp.srp = 1) ) AND ( wpp.isbudget IS NULL OR wpp.isbudget <> 1 ) AND ( wpp.deleted IS NULL OR wpp.deleted <> 1 ) WHERE wp_posts.post_type = \'used-product\' AND wpp.value > 0 AND wp_posts.post_status = \'publish\' GROUP BY r, minvalue, maxvalue
我希望它输出一个可以手动运行的SQL查询。现在,它不能因为@r:=和@r。
查询是通过附加字符串创建的,因此@r=和@r位于字符串内部。但是,我想输出Wordpress运行的SQL查询。
SO网友:tiago calado
您得到的是sql语句,而不是sql查询结果。
实际上,die是一个函数,所以应该是die();使用时
print_r($query); die();
$rows = $wpdb->get_results($query);
第二行将不使用,因此查询不会显示任何结果,也就是说,$query是一个php变量,它将是sql查询,但可以有任何其他名称,例如$myQuery。这就是说,您得到的输出是当您对第一行进行注释时,将在第二行中使用的查询(sql语句)。因此,除非在数据库中有所有的@r,否则对数据库的查询将不会得到任何结果,将返回一个sintaxe错误。这意味着,就像我理解的那样,@r不是表的预期行名称。问题来自后面,即创建变量$查询的地方。这里有一个例子可以说明我所说的。将此代码放在您与我们共享的行之前
$myQuery = \'show tables\';
$rows = $wpdb->get_results($myQuery);
echo \'<pre>\';
print_r($rows);
echo \'</pre>\';
die();
这将返回所有表名,如果只使用代码而不使用第一行,则可能会收到sintaxe错误。如果发生这种情况,问题在于变量$查询中如何创建变量。