2013-08-03 48 views
-1

我正在开发一个REST API系统,允许人们下载一个git项目并轻松地为他们的移动应用程序或web服务设置一个API。我有一个设置页面,我在创建表格时遇到问题。是MySQL还是我的php?

这里是我的github上的项目的链接,它是无处接近完成,但你可以看到它的更新进度几乎每天:https://github.com/evanstoddard/REST-Easy

我有工作的SQL语句时,我将其粘贴到phpMyAdmin的,但它在php中给我一个错误。我用mysqli_error,我只是得知我的声明有错误。

这里是我的SQL语句:

CREATE TABLE `applications` (
    `appID` int(11) NOT NULL AUTO_INCREMENT, 
    `appName` varchar(10000) NOT NULL, 
    `appDB` varchar(10000) NOT NULL, 
    `appPrefix` varchar(10000) NOT NULL, 
    PRIMARY KEY (`appID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; 

CREATE TABLE `login` (
    `userID` int(11) NOT NULL AUTO_INCREMENT, 
    `username` varchar(1000) NOT NULL, 
    `emailAddress` varchar(1000) NOT NULL, 
    `password` varchar(10000) NOT NULL, 
    `hash` varchar(10000) NOT NULL, 
    `verified` tinyint(1) NOT NULL, 
    PRIMARY KEY (`userID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; 

CREATE TABLE `saltTable` (
    `userID` int(11) NOT NULL AUTO_INCREMENT, 
    `salt` varchar(10000) NOT NULL, 
    PRIMARY KEY (`userID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 

这是我的PHP函数:

function createInitialTables(){ 

    $serverURL = $_SESSION['server']; 
    $username = $_SESSION['username']; 
    $password = $_SESSION['password']; 
    $database = $_SESSION['database']; 

    $con = mysqli_connect($serverURL, $username, $password, $database); 

    $sql = 'CREATE TABLE `applications` (
    `appID` int(11) NOT NULL AUTO_INCREMENT, 
    `appName` varchar(10000) NOT NULL, 
    `appDB` varchar(10000) NOT NULL, 
    `appPrefix` varchar(10000) NOT NULL, 
    PRIMARY KEY (`appID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; 

CREATE TABLE `login` (
    `userID` int(11) NOT NULL AUTO_INCREMENT, 
    `username` varchar(1000) NOT NULL, 
    `emailAddress` varchar(1000) NOT NULL, 
    `password` varchar(10000) NOT NULL, 
    `hash` varchar(10000) NOT NULL, 
    `verified` tinyint(1) NOT NULL, 
    PRIMARY KEY (`userID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; 

CREATE TABLE `saltTable` (
    `userID` int(11) NOT NULL AUTO_INCREMENT, 
    `salt` varchar(10000) NOT NULL, 
    PRIMARY KEY (`userID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; 
'; 

    $result = mysqli_query($con, $sql); 
    $error = mysqli_error($con); 

    print($error); 

} 

这里的mysqli_error():

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TABLE `login` (
    `userID` int(11) NOT NULL AUTO_INCREMENT, 
    `username` ' at line 9CREATE TABLE `applications` (
    `appID` int(11) NOT NULL AUTO_INCREMENT, 
    `appName` varchar(10000) NOT NULL, 
    `appDB` varchar(10000) NOT NULL, 
    `appPrefix` varchar(10000) NOT NULL, 
    PRIMARY KEY (`appID`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1; 

我相信这是我的PHP问题因为我的声明在phpMyAdmin中有效。

编辑:

该解决方案已被发现。由于Ben Emmett指出,我试图执行3 sql查询mysqli_query()当我应该使用mysqli_multi_query()

+0

是否正在创建应用程序表?看起来像创建登录表时触发的错误 – anthony

+0

不,像下面说的Ben Emmett,我想用mysql_query一次执行3个查询,所以我需要使用mysqli_multi_query() –

回答

6

使用mysqli_multi_query()mysqli_query仅用于执行单个查询,并且您要求它执行3.

+0

我不能用其他的stackoverflow提出问题这个账户比这个账户有更多的声誉,所以在我接受你的回答之前我必须等一下。 –

0

上述命令是正确的。但是,将字符串传递给mysqli_multi_query()时,不需要将最后一个命令放在末尾的分号。 PHP查询命令自动添加您通常添加的分号。