【问题标题】:MySQLi multi_query won't workMySQLi multi_query 不起作用
【发布时间】:2013-09-02 10:00:19
【问题描述】:

向我的 MySQL 数据库发送 multi_query 时遇到问题。我想获取文件的内容并通过多查询将其发送到数据库

我用这个方法做了一个 MySQLi 类:

    public function multi_query($resource)
    {   
        $Timer  = microtime(true);
        if($this->MySQLiObj->multi_query($resource))
        {
            do {
                if ($result = $this->MySQLiObj->store_result())
                    $result->free();

                $this->queryCount++;

                if(!$this->MySQLiObj->more_results()){break;}

            } while ($this->MySQLiObj->next_result());      
        }

        $this->SQL[]    = $resource;

        if ($this->MySQLiObj->errno)
        {
            if($this->MySQLiObj->error == true) {
                echo "SQL Error: ".$this->MySQLiObj->error."<br><br>Query Code: ".$resource;
            } else {
                return "SQL Error: ".$this->MySQLiObj->error;
            }
        }
    }

我在这里使用它:

    $mysqli = new \System\Database\MySQLi($_SESSION["server"], $_SESSION["username"], $_SESSION["password"], $_SESSION["database"], $_SESSION["port"]);
    echo $mysqli->multi_query(file_get_contents('install.sql'));

这是我的 .sql 文件:

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

CREATE TABLE `t_User`
(
    `p_ID` INT(11) UNSIGNED AUTO_INCREMENT,
    `m_Firstname` VARCHAR(75) NOT NULL,
    `m_Surename` VARCHAR(150) NOT NULL,
    `m_Email` VARCHAR(255) NOT NULL UNIQUE,
    `m_Password` VARCHAR(65) NOT NULL,
    `m_ActivationCode` VARCHAR(36) NOT NULL UNIQUE,
    `m_Activated` BIT DEFAULT 0,
    `m_Online` BIT DEFAULT 0,
    `m_LastActivity` DATETIME,
    `m_Birthdate` DATE,
    `m_ProfilPicture` VARCHAR(255),
    `m_SchoolID` INT(11),
    `m_AddressID` INT(11),
    `m_IsAdmin` BIT DEFAULT 0,
    PRIMARY KEY (`p_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `t_School`
(
    `p_ID` INT PRIMARY KEY AUTO_INCREMENT,
    `m_Name` VARCHAR(150) UNIQUE NOT NULL,
    `m_Description` VARCHAR(255),
    `m_Homepage` VARCHAR(150) UNIQUE,
    `m_AddressID` INT,
    `m_ManagerID` INT NOT NULL UNIQUE
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

这是我的错误:

SQL 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; 附近使用正确的语法; /*!40101 SET @OLD_CHARACTER_SET_CL' 在第 1 行

删除完整的第一行也没关系。 而且我还尝试将文件的内容复制到一个 php 变量中......但它也不起作用。

希望有人可以帮助我:/

【问题讨论】:

  • 一个疯狂的猜测。您的文件顶部没有 BOM 签名吗?
  • 什么是 BOM 签名??
  • 让我为您搜索一下:google.com/search?q=BOM+signature
  • 哦,好吧...我的坏^^应该用谷歌搜索它的 mysqelf -.-"

标签: php mysql iis-express


【解决方案1】:

说到mysqli_multi_query,对我来说没问题:

$q = <<<HERE
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

CREATE TABLE `t_User`
(
    `p_ID` INT(11) UNSIGNED AUTO_INCREMENT,
    `m_Firstname` VARCHAR(75) NOT NULL,
    `m_Surename` VARCHAR(150) NOT NULL,
    `m_Email` VARCHAR(255) NOT NULL UNIQUE,
    `m_Password` VARCHAR(65) NOT NULL,
    `m_ActivationCode` VARCHAR(36) NOT NULL UNIQUE,
    `m_Activated` BIT DEFAULT 0,
    `m_Online` BIT DEFAULT 0,
    `m_LastActivity` DATETIME,
    `m_Birthdate` DATE,
    `m_ProfilPicture` VARCHAR(255),
    `m_SchoolID` INT(11),
    `m_AddressID` INT(11),
    `m_IsAdmin` BIT DEFAULT 0,
    PRIMARY KEY (`p_ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
HERE;

$m = mysqli_connect('localhost','test','aaa','test');
$m->multi_query($q);
var_dump($m->error);
  • 没有出现错误,表已创建。所以,这个功能显然是有效的。

【讨论】:

  • 这也适用于我...但是如果我写 $q =
  • 那么你必须比较这两个文本。以urlencode输出,比较长度等
  • okey...现在我知道问题所在了...在文件中字符串的开头有一个 BOM 签名... %EF%BB%BF 所以我将字符串减去,最后它有效^^ $m->multi_query(substr(file_get_contents('install.sql')), 3);我不知道这是否是最好的方法......但它有效......感谢您帮助调试我的问题!
猜你喜欢
  • 2012-01-25
  • 2018-09-22
  • 1970-01-01
  • 2019-07-16
  • 2016-08-07
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多