0

multi_query を MySQL データベースに送信すると問題が発生します。ファイルの内容を取得し、マルチクエリでデータベースに送信したい

このメソッドを含む 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 構文にエラーがあります。near ' SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。/*!40101 SET @OLD_CHARACTER_SET_CL' at line 1

最初の行を完全に削除しても問題ありません。また、ファイルの内容をphp変数にコピーしようとしました...しかし、どちらも機能しません。

誰かが私を助けてくれることを願っています:/

4

1 に答える 1

3

と言えば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);
  • エラーは発生せず、テーブルが作成されました。したがって、この機能は明らかに機能します。
于 2013-09-02T10:19:41.027 に答える