2013-08-03 2 views
-1

Я работаю над системой REST API, позволяющей людям загружать проект git и легко настраивать 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.

EDIT:

Решение было найдено. Как указал Ben Emmett, я пытаюсь выполнить 3 sql-запроса с mysqli_query(), когда я должен использовать mysqli_multi_query().

+0

Создана ли таблица приложений? Похоже, что ошибка возникает при создании таблицы входа в систему – anthony

+0

Нет, как указано ниже, Ben Emmett, я пытаюсь выполнить сразу три запроса с помощью mysql_query, поэтому мне нужно использовать mysqli_multi_query() –

ответ

6

Использование mysqli_multi_query(). mysqli_query предназначен только для выполнения одного запроса, и вы просите его выполнить 3.

+0

Я не могу задавать вопросы с моим другим методом stackoverflow которая имеет гораздо большую репутацию, чем эта, поэтому я должен немного подождать, прежде чем я приму свой ответ. –

0

Вышеуказанная команда верна. Однако конечная точка с запятой, которую вы ставите на последнюю команду, не требуется, когда вы передаете строку в mysqli_multi_query(). Команда запроса PHP автоматически добавляет точку с запятой, которую вы обычно добавляете.

Смежные вопросы