调用mysqli :: query和mysqli :: execute不返回错误,但不在数据库中执行

时间:2014-08-14 23:34:36

标签: php mysql mysqli mysqli-multi-query

我试图执行DROP TEMPORARY TABLE语句。我使用MySQL Workbench运行该语句,它在那里工作。我已经确保我在PHP和MySQL Workbench中成功登录了同一个用户。

我尝试过使用mysqli :: query()和mysqli :: prepare然后使用mysqli :: execute()方法。当我尝试执行DROP TEMPORARY TABLE语句时,两者都不起作用。但是,当我执行INSERT或SELECT语句时,两者都有效。

此代码不会返回错误,但也不会在数据库中执行:

public function executeSQL()
{       
    // SQL statement using query method
    if (!$this->mySQLi->query("DROP TEMPORARY TABLE IF EXISTS TIME_INTERVAL_DATA") ) 
    {
        $this->writeSQLErrorToLog("Query method returned an error.");
    }
    if(!$this->mySQLi->commit()) 
    {
        // Committing the transaction failed.
        $this->writeSQLErrorToLog("Commit method returned an error.");
    }

    // SQL statement using prepare and execute methods
    $stmt = $this->mySQLi->prepare("DROP TEMPORARY TABLE IF EXISTS TIME_INTERVAL_DATA");
    if($stmt) 
    {
        if(!$stmt->execute())
        {
            // Execute method returned an error.
            $this->writeSQLErrorToLog("Execute method returned an error.");
            $this->throwMySQLErrorAndCloseStatement($stmt);
        }
    } else {
        // Prepare method returned an error.
        $this->writeSQLErrorToLog("Prepare method returned an error.");
        return;
    }
    // ...
}

但是,以下代码确实在数据库中执行:

$stmt = $this->mySQLi->prepare("INSERT INTO TABLE1 (ID) VALUES (1)");
if(!$stmt->execute()) {
    // Return the MySQL Error message and number
    $this->throwMySQLErrorAndCloseStatement($stmt);
}

我已经阅读了尽可能多的MySQL和PHP文档。我已经阅读并重新阅读了所有上述mysqli方法的文档。我已经阅读并尝试了使用mysqli :: escape_string()的变体,但是当我使用它时会返回错误。我还尝试了不同SQL语句的许多变体。

简而言之,所有INSERT和SELECT语句都有效。但是,DROP TEMPORARY TABLE语句永远不会工作,永远不会返回错误。我真的在这个问题上摸不着头脑。任何帮助将不胜感激!!

0 个答案:

没有答案