WordPress $ wpdb-> query()不返回

时间:2019-02-19 14:07:54

标签: php mysql wordpress

使用$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服务器:

  • Apache 2.4.23
  • MySQL 5.7.14
  • PHP 7.0.10
  • WordPress 5.0.3

示例代码:

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()

0 个答案:

没有答案