为什么执行多个查询一次导致Wordpress错误,而不是在phpMyAdmin?



这是我的查询和我是如何做到的:

$query_string = "DELETE FROM $wpdb->postmeta WHERE post_id IN(SELECT ID FROM $wpdb->posts WHERE post_type = 'product'); n";
$query_string .= "DELETE FROM $wpdb->posts WHERE post_type = 'product'"
$wpdb->query($query_string);

这将运行并做什么,它应该在phpMyAdmin。但是在Wordpress中,它会导致一个错误:

[WordPress-database error] You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DELETE FROM wp_posts WHERE post_type = 'product'' at line 2 [for query] DELETE FROM wp_postmeta WHERE post_id IN(SELECT ID FROM wp_posts WHERE post_type = 'product'); 
DELETE FROM wp_posts WHERE post_type = 'product' Kirjoittaja: require_once('wp-admin/admin.php'), do_action('product_page_opencart-import'), WP_Hook->do_action, WP_Hook->apply_filters, theme_slug_opencart_import

注意,错误出现在第2行。我没有逻辑上的解释,为什么相同的查询不会通过Wordpress执行,但会通过phpMyAdmin执行。

显而易见的简单解决方案当然是分别运行两个查询,,但我不会接受这个答案,因为稍后我将执行一个包含数千个查询的数据库操作。通过将所有内容构建到单个查询字符串中并运行该查询字符串,而不是单独运行每个查询字符串,这样做的速度要快得多。这也是关于原则的:语法,从表面上看,是正确的。因此,这应该是可能的。

大多数应用程序都意识到允许多个查询是在邀请黑客做一些顽皮的事情。这样的黑客可以在WP中发生,但不会在phpMyAdmin中发生。

简单地说,改掉一次使用多个查询的习惯。

在某些情况下,将多个查询放在一个存储过程中是很方便的,这样用户就可以执行单个CALL来执行它。

最新更新