如何在单次执行中执行多个sql查询

时间:2011-09-07 14:46:38

标签: php mysql

我正在使用这个PHP代码来连接两个查询:

$qry = "Create Table $this->tablename (".
                "id_user BIGINT NOT NULL AUTO_INCREMENT ,".
                "name VARCHAR( 128 ) NOT NULL ,".
                "lastname VARCHAR( 128 ) NOT NULL ,".
                "email VARCHAR( 128 ) NOT NULL ,".
                "password VARCHAR( 32 ) NOT NULL ,".
                "confirmcode VARCHAR(32) ,".
                "ident_number VARCHAR( 128 ) NOT NULL ,".
                "professional_area VARCHAR( 128 ) NOT NULL ,".
                "last_update_cv DATETIME NOT NULL ,".
                "last_login DATETIME NOT NULL ,".
                "PRIMARY KEY ( id_user )".
                ");";
$qry = $qry . "CREATE TABLE ". table_cv . 
" (id_cv BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
id_user BIGINT NOT NULL, 
phone_number VARCHAR(35) NOT NULL, 
profile_text VARCHAR(500) NOT NULL);";

任何时候发送查询我都会收到语法错误 在单次执行中执行两个查询的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

如果您使用的是PHP 5,则可以使用multi_query

http://www.php.net/manual/en/mysqli.multi-query.php

答案 1 :(得分:0)

使用HEREDOC

$sql = <<<EOL
Create Table {$this->tablename} (
    id_user BIGINT NOT NULL AUTO_INCREMENT,
    name VARCHAR( 128 ) NOT NULL ,
    lastname VARCHAR( 128 ) NOT NULL ,
    email VARCHAR( 128 ) NOT NULL ,
    password VARCHAR( 32 ) NOT NULL ,
    confirmcode VARCHAR(32) ,
    ident_number VARCHAR( 128 ) NOT NULL ,
    professional_area VARCHAR( 128 ) NOT NULL ,
    last_update_cv DATETIME NOT NULL ,
    last_login DATETIME NOT NULL ,
    PRIMARY KEY ( id_user )
);
EOL;

它们使生成多行字符串变得非常容易。但请注意,MySQL的PHP​​驱动程序不允许在单个查询调用中发出多个查询作为安全限制(它消除了大量的SQL注入攻击)。

您必须发出两个单独的查询。

答案 2 :(得分:0)

你正在使用multi_query吗? http://php.net/manual/en/mysqli.multi-query.php