2013-08-13 3 views
-3
$sql = "CREATE TABLE IF NOT EXISTS questions_$username(". 
     "question_id INT NOT NULL AUTO_INCREMENT, ". 
     "question MEDIUMTEXT, ". 
     "answer CHAR(1), ". 
     "PRIMARY KEY (question_id))"; 
$retval = mysql_query($sql, $conn) or die(mysql_error()); 

$sql = "CREATE TABLE IF NOT EXISTS tests_$username(". 
     "test_id INT NOT NULL AUTO_INCREMENT, ". 
     "name VARCHAR(30) NOT NULL, ". 
     "duration INT NOT NULL, ". 
     "PRIMARY KEY (test_id))"; 
$retval = mysql_query($sql, $conn) or die(mysql_error()); 

$sql = "CREATE TABLE IF NOT EXISTS questions_tests_$username(". 
     "test_id INT NOT NULL, ". 
     "question_id INT NOT NULL, ". 
     "FOREIGN KEY (test_id) REFERENCES tests_$username(test_id), ". 
     "FOREIGN KEY (question_id) REFERENCES questions_$username(question_id), ". 
     "PRIMARY KEY (test_id, question_id))". 
$retval = mysql_query($sql, $conn) or die(mysql_error()); 

echo "debug"; 

Первые 2 таблицы создаются успешно, а третий нет. Он даже не дает никаких ошибок. Последняя строка выполняется. В моей базе данных нет ограничений на количество таблиц.Таблица не существует Ошибка

+7

[** Пожалуйста, пожалуйста, _please_, не используйте 'mysql_ *' функции в новом коде **) (http://bit.ly/phpmsql). Они больше не поддерживаются [и официально устарели] (http://j.mp/XqV7Lp). См. [** красное поле **] (http://j.mp/Te9zIL)? Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/ mysqli) - [эта статья] (http://j.mp/QEx8IB) поможет вам решить, какой из них. Если вы выберете PDO, [здесь хороший учебник] (http://j.mp/PoWehJ). – Neal

+21

Также, пожалуйста, пожалуйста, не создавайте новые таблицы для каждого пользователя в вашей системе. Это антипаттерн, который убьет ваше приложение, ваш сервер, вас самих, вашу семью и всех, чье имя начинается с «S». – Mchl

+0

. Не могли бы вы попытаться добавить echo $ sql после каждого утверждения, чтобы увидеть, какая строка была создана? Затем разместите их здесь. – Nikhil

ответ

6

Думаю, вам нужно переосмыслить общий рисунок.

Вы должны не создавать новую таблицу для каждого пользователя!

У вас должны быть таблицы, такие как тесты, вопросы, test_questions, ответы и пользователи.

Что-то вроде этого:

tests: 
    id, name, duration 
questions: 
    id, question 
test_questions: 
    id, test_id, question_id 
users: 
    id, name 
answers: 
    id, test_questions_id, user_id, answer 

Тогда вы знаете, какой тест, который пользователь ответил какой вопрос легко с одним запросом.

+0

это не отвечает на мой вопрос, но я все равно удалю этот код. –

+3

@BojanSerafimov, как это не отвечает на ваш вопрос? – Neal

+0

@BojanSerafimov lolwut? Я рекомендую вам прочитать [эту книгу] (http://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557). – HamZa

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