调试查询时删除不需要的非SQL语法字符

时间:2021-10-25 作者:haher

我正在尝试调试一个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查询。

1 个回复
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错误。如果发生这种情况,问题在于变量$查询中如何创建变量。

相关推荐

打开多个帖子编辑器页面时,MySQL CPU使用率激增

我正在管理WordPress server 2Core CPU 8Gb Ram,托管在Openlitespeed+MariaDB 11.4和PHP 7.4上。已安装Redis和OPache。在WordPress网站上,Redis Object Cache 和Litespeed LSCache 是否已安装并启用插件。内存限制:512MB,最大执行时间:120该网站有超过140k篇帖子,浏览网站页面和内容是一种流畅的体验。但问题是,每当编辑器登录创建帖子时,CPU使用率就会激增到90%或更多。和wp管理员/新