2013-08-03 110 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查詢命令自動添加您通常添加的分號。