Вставить в две таблицы из одной формы - PullRequest
0 голосов
/ 12 августа 2010

Вставить в две таблицы из одной формы.Первая вставка идет нормально, вторая генерирует эту ошибку Duplicate entry '0' for key 1 Есть идеи, что происходит?

$connection=mysql_connect ("localhost", "foo", "bar") or die ("I cannot connect to the database.");
$db=mysql_select_db ("database", $connection) or die (mysql_error());
$query = "INSERT INTO worklog (id, newtime, datetime, clientname, clientcode, startmo, startday, startyr, endmo, endday, endyr, duemo, dueday, dueyr, market, job, allTypes, spec, status, designer, dsgnemail, adrep, ademail, frame1, frame2, frame3, rush) VALUES ('$id', $newtime, now(), '$clientname', '$clientcode', '$startmo', '$startday', '$startyr', '$endmo', '$endday', '$endyr', '$duemo', '$dueday', '$dueyr', '$market', '$job', '$allTypes', '$spec', '$status', '$designer', '$dsgnemail', '$adrep', '$ademail', '$frame1', '$frame2', '$frame3', '$rush')";
$sql_result = mysql_query($query, $connection) or die (mysql_error());

$worklog_id=mysql_insert_id($connection); 

$connection2=mysql_connect ("localhost", "foo", "bar") or die ("I cannot connect to the database.");
$db2=mysql_select_db ("database", $connection2) or die (mysql_error());
$query2 = "INSERT INTO worklognotes (worklog_id, spec) VALUES ('$worklog_id', '$spec')";

$sql_result = mysql_query($query2, $connection2) or die (mysql_error());    

Ответы [ 2 ]

3 голосов
/ 12 августа 2010

Я думаю, виновником является линия:

$worklog_id=mysql_insert_id($connection); 

согласно документации PHP:

"Идентификатор, сгенерированный для столбца AUTO_INCREMENT предыдущим запросом в случае успеха, 0, если предыдущий запрос не генерирует значение AUTO_INCREMENT, или FALSE, если не установлено соединение MySQL"

Таким образом, если идентификатор в рабочем журнале не AUTO_INCREMENT, он всегда будет возвращать 0 ... ваша вторая попытка выполнения кода приведет к:

Дублирующая запись '0' для ключа 1

Два способа исправить это:

  1. идентификатор рабочего журнала должен быть AUTO_INCREMENT ... таким образом mysql_insert_id будет возвращать идентификатор, сгенерированный базой данных, и вы можете использовать его в качестве рабочего идентификатора для следующего запроса

  2. просто используйте $ id вместо $ worklog_id

1 голос
/ 12 августа 2010

обычно с помощью столбца идентификатора таблицы вы устанавливаете его в автоинкремент и никогда не вставляете его явно. Система управления базами данных позаботится о вставке этого столбца. Ошибка означает, что вы вставляете строку с таким идентификатором, то есть столбец имеет ограничение UNIQUE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...