|
|
|
| Здравствуйте Уважаемое сообщество.
У меня к Вам вопрос по участку кода.
В нем создаётся 2 таблицы vopros и var_otveta У меня не получается записать значения в таблицы. Выходит ошибка Duplicate entry '1' for key 1 (двойной вход '1' для клавиши ключа '1'). Как исправить?
<?php
$a=mysql_connect("localhost","root","");
if(!$a)
{ echo "Не могу соединится с базой!<br>";
echo mysql_error();
exit;
}
mysql_query( "CREATE DATABASE vopros" );
mysql_select_db( "vopros");
mysql_query("CREATE TABLE vopros (
id_voprosa INT NOT NULL,
name_vopros TINYTEXT NOT NULL,
PRIMARY KEY (id_voprosa)
)");
// Создаём таблицу вопросов
mysql_query("insert into vopros(id_voprosa, name_vopros) values(1, 'Какие из этих видов транспорта передвигаются по земле?')") or die (mysql_error());
mysql_query("insert into vopros(id_voprosa, name_vopros) values(2, 'Какой из этих предметов по геометрической форме представляет сферу?')") or die (mysql_error());
mysql_query("insert into vopros(id_voprosa, name_vopros) values(3, 'Кто из нижеперечисленного умеет летать?')") or die (mysql_error());
// Создаём таблицу ответов
mysql_query("CREATE TABLE var_otveta (
id_var_otveta INT NOT NULL,
id_parent INT NOT NULL,
var_otveta TINYTEXT NOT NULL,
)");
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(1, 1, 'Подводная лодка')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(2, 1, 'Поезд')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(3, 1, 'Самолёт')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(4, 1, 'Дерижабль')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(1, 2, 'Куб')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(2, 2, 'Пирамида')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(3, 2, 'Мяч')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(4, 2, 'Конус')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(1, 3, 'Птица')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(2, 3, 'Корова')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(3, 3, 'Крокодил')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(4, 3, 'Жираф')") or die (mysql_error());
?>
|
| |
|
|
|
|
|
|
|
для: pautina
(18.06.2008 в 11:45)
| | А у вас это запрос
CREATE TABLE var_otveta (
id_var_otveta INT NOT NULL,
id_parent INT NOT NULL,
var_otveta TINYTEXT NOT NULL,
)
вообще работает, я имею ввиду с запятой после TINYTEXT NOT NULL ? | |
|
|
|
|
|
|
|
для: AcidTrash
(18.06.2008 в 12:07)
| | Вы знаете я использую top server, может с ним это как то связано.
Я и сам думаю что запись в таблицы должна осуществлятся но вот выводится такая ошибка и всё тут. Что делать низнаю. | |
|
|
|
|
|
|
|
для: pautina
(18.06.2008 в 12:48)
| | может я не прав, но вы там (где "Куб") в ключевое поле пытаетесь вставить 1, которое уже присвоено ("Подводная лодка")
id_var_otveta - это же ключевое поле, соответственно не должно быть повторяющихся значений, лучше сделать его AUTOINCREMENT | |
|
|
|
|
|
|
|
для: ronin80
(18.06.2008 в 13:14)
| | Давайте попробую такой вариант
...
mysql_query("CREATE TABLE var_otveta (
id_var_otveta INT NOT NULL AUTO_INCREMENT,
id_parent INT NOT NULL,
var_otveta TINYTEXT NOT NULL
)");
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(1, 1, 'Подводная лодка')") or die (mysql_error());
...
|
Но что мне тогда писать в values(1, ...) вместо цифр для id_var_otveta | |
|
|
|
|
|
|
|
для: ronin80
(18.06.2008 в 13:14)
| | >может я не прав, но вы там (где "Куб") в ключевое поле пытаетесь вставить 1, которое уже присвоено ("Подводная лодка")
Так судя по запросу создания второй таблицы, поле id_var_otveta не является ключевым. | |
|
|
|
|
|
|
|
для: AcidTrash
(18.06.2008 в 13:42)
| | Да пусть во 2-ой таблице id_var_otveta будет ключевым,
mysql_query("CREATE TABLE var_otveta (
id_var_otveta INT NOT NULL AUTO_INCREMENT,
id_parent INT NOT NULL,
var_otveta TINYTEXT NOT NULL,
PRIMARY KEY (id_var_otveta)
)");
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(0, 1, 'Подводная лодка')") or die (mysql_error());
|
Если id_var_otveta AUTO_INCREMENT в values на это место писать 0 или нет | |
|
|
|
|
|
|
|
для: pautina
(18.06.2008 в 13:52)
| | Вообще это поле не трогать
mysql_query("insert into var_otveta(id_parent, var_otveta) values(1, 'Подводная лодка')") or die (mysql_error());
|
| |
|
|
|
|
|
|
|
для: AcidTrash
(18.06.2008 в 14:01)
| | Сейчас вторая таблица выглядит так
// Создаём таблицу ответов
mysql_query("CREATE TABLE var_otveta (
id_var_otveta INT NOT NULL AUTO_INCREMENT,
id_parent INT NOT NULL,
var_otveta TINYTEXT NOT NULL,
PRIMARY KEY (id_var_otveta)
)");
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(1, 'Подводная лодка')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(1, 'Поезд')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(1, 'Самолёт')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(1, 'Дерижабль')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(2, 'Куб')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(2, 'Пирамида')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(2, 'Мяч')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(2, 'Конус')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(3, 'Птица')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(3, 'Корова')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(3, 'Крокодил')") or die (mysql_error());
mysql_query("insert into var_otveta(id_var_otveta, id_parent, var_otveta) values(3, 'Жираф')") or die (mysql_error());
|
Но сообщение Duplicate entry '1' for key 1 выводится всё равно от повторяющихся значений поля id_parent я избавится не могу они обеспечивают связь с таблицей 1 | |
|
|
|
|
|
|
|
для: pautina
(18.06.2008 в 14:10)
| | Вы внимательно мой запрос смотрели
mysql_query("insert into var_otveta(id_parent, var_otveta) values(1, 'Подводная лодка')") or die (mysql_error());
|
Во всех запросах на добавление уберите id_var_otveta. | |
|
|
|
|
|
|
|
для: AcidTrash
(18.06.2008 в 14:25)
| | Прошу прощения моя вина. | |
|
|
|
|
|
|
|
для: pautina
(18.06.2008 в 14:28)
| | Вы знаете сейчас весь код выглядит так
<?php
$a=mysql_connect("localhost","root","");
if(!$a)
{ echo "Не могу соединится с базой!<br>";
echo mysql_error();
exit;
}
mysql_query( "CREATE DATABASE vopros" );
mysql_select_db( "vopros");
mysql_query("CREATE TABLE vopros (
id_voprosa INT NOT NULL,
name_vopros TINYTEXT NOT NULL,
PRIMARY KEY (id_voprosa)
)");
// Создаём таблицу вопросов
mysql_query("insert into vopros(id_voprosa, name_vopros) values(1, 'Какие из этих видов транспорта передвигаются по земле?')") or die (mysql_error());
mysql_query("insert into vopros(id_voprosa, name_vopros) values(2, 'Какой из этих предметов по геометрической форме представляет сферу?')") or die (mysql_error());
mysql_query("insert into vopros(id_voprosa, name_vopros) values(3, 'Кто из нижеперечисленного умеет летать?')") or die (mysql_error());
// Создаём таблицу ответов
mysql_query("CREATE TABLE var_otveta (
id_var_otveta INT NOT NULL AUTO_INCREMENT,
id_parent INT NOT NULL,
var_otveta TINYTEXT NOT NULL,
PRIMARY KEY (id_var_otveta)
)");
mysql_query("insert into var_otveta(id_parent, var_otveta) values(1, 'Подводная лодка')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(1, 'Поезд')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(1, 'Самолёт')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(1, 'Дерижабль')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(2, 'Куб')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(2, 'Пирамида')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(2, 'Мяч')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(2, 'Конус')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(3, 'Птица')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(3, 'Корова')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(3, 'Крокодил')") or die (mysql_error());
mysql_query("insert into var_otveta(id_parent, var_otveta) values(3, 'Жираф')") or die (mysql_error());
?>
|
Данная ошибка Duplicate entry '1' for key 1 (Двойной вход '1' для {ключа} 1)
Всё равно не изчезла. Что делать.
Вы знаете я пробовал коментарить таблицы данная ошибка возникает в участке кода который формирует таблицу вопросов (я закоментарил табл. ответов ошибка осталась, потом закоментарил таблицу вопросов запись осуществилась)
И ещё когда в radmin я стер все значения, после этого запись произошла сразу в 2 таблицах, но только 1 раз, если потом запускать этот же код запись уже не происходит и выдаётся та же ошибка.
Может это как то поможет. | |
|
|
|
|
|
|
|
для: pautina
(18.06.2008 в 15:05)
| | можете показать show create table этих таблиц (соответственно после их создания) ?
возможно создан индекс unique по внешнему ключу | |
|
|
|
|
|
|
|
для: pautina
(18.06.2008 в 15:05)
| | >И ещё когда в radmin я стер все значения, после этого запись произошла сразу в 2 таблицах, >но только 1 раз, если потом запускать этот же код запись уже не происходит и выдаётся та >же ошибка.
Так правильно, вы пытаетесь повторным запуском скрипта создать туже базу, теже таблицы, и тд, но они уже есть с предыдущего запуска скрипта. Вот и выдается такая ошибка | |
|
|
|
|
|
|
|
для: AcidTrash
(18.06.2008 в 17:49)
| | Оказывается везде при создании таблиц БД всегда для полей id_name лучше использовать PRIMARU KEY и AUTO_INCREMENT.
Теперь у меня есть БД и 2 таблицы, у меня возник такой вопрос как вытащить название вопроса (поле name_vopros таблицы vopros БД useropros)
Я использовал следующий код
<?php
$a=mysql_connect("localhost","root","");
if(!$a)
{ echo "Не могу соединится с базой!<br>";
echo mysql_error();
exit;
}
mysql_select_db( "useropros");
$w=mysql_query("select name_vopros from vopros where id_voprosa=1");
//print_r(mysql_fetch_row($w));
//print_r(mysql_fetch_assoc($w));
//print_r(mysql_fetch_array($w));
//print_r(mysql_result($w));
print_r(mysql_fetch_object($w))
?>
|
Пробовал такие варианты вывода, Но выводится не то, хотелось сделать просто вывод ответа. | |
|
|
|
|
|
|
|
для: pautina
(19.06.2008 в 09:37)
| | Извините нужно было писать вот так
print_r(mysql_result($num_vopr,0));
|
| |
|
|
|
|