使用$wpdb->query()
成功执行两个SQL DROP TABLE语句后,$wpdb->query()
永远不会从第三次调用返回。下面是示例PHP代码和debug.log中的代码行。我在这里或其他人报告了类似问题的wordpress.org上都找不到任何文档。
如果我在第三个DROP TABLE之前插入DROP VIEW IF EXISTS语句,则DROP VIEW IF EXISTS将执行并返回,并且当第三个DROP TABLE被称为$wpdb->query()
时,将永不返回。
如果我在第三个DROP TABLE之前插入第二个DROP VIEW IF EXISTS语句,则两个DROP VIEW IF EXISTS都将执行并返回,并且当第三个DROP TABLE称为$wpdb->query()
时将永不返回。
我已经重新排列了DROP TABLE语句。哪一个是第三个DROP TABLE没什么区别。
如果我执行一个包含所有三个表名的DROP TABLE IF EXISTS,它会正常工作。
$table_name1 = $wpdb->prefix . "Codes";
$table_name2 = $wpdb->prefix . "Phrases";
$table_name3 = $wpdb->prefix . "Exceptions";
$SQL = "DROP TABLE IF EXISTS $table_name1, $table_name2, $table_name3;";
$wpdb->query($SQL);
在一个语句中删除三个表是一种令人满意的解决方法,但是我很好奇为什么当我执行两个DROP TABLE语句时,第三个表会挂起。您以前看过这种行为吗?你知道为什么会这样吗?是否可以在较新的软件版本上进行补救?
这是我在参与活动中要使用的软件套件: WAMP服务器:
示例代码:
function Drop_Tables() {
global $wpdb;
error_log("begin");
$table_name = $wpdb->prefix . "Codes";
$SQL = "DROP TABLE IF EXISTS $table_name;";
$wpdb->query($SQL);
$xresult=$wpdb->last_error;
if ($xresult) {
error_log($xresult);
}
error_log("After Drop Table Codes");
$table_name = $wpdb->prefix . "Phrases";
$SQL = "DROP TABLE IF EXISTS $table_name;";
$wpdb->query($SQL);
$xresult=$wpdb->last_error;
if ($xresult) {
error_log($xresult);
}
error_log("After Drop Table Phrases");
$table_name = $wpdb->prefix . "Exceptions";
$SQL = "DROP TABLE IF EXISTS $table_name;";
error_log("Before query()");
$wpdb->query($SQL);
error_log("After query()");
$xresult=$wpdb->last_error;
if ($xresult) {
error_log($xresult);
}
error_log("After Drop Table Exceptions");
}
通过debug.log:
[19-Feb-2019 13:16:54 UTC] begin
[19-Feb-2019 13:16:54 UTC] After Drop Table Codes
[19-Feb-2019 13:16:54 UTC] After Drop Table Phrases
[19-Feb-2019 13:16:54 UTC] Before query()