Клянусь, я налил и перелил все другие подобные вопросы на этом сайте и другие … но я думаю, что я просто что-то упустил. Надеюсь, кто-то может указать глупую ошибку, что мой мозг скрывается от меня. 🙂
Мой скрипт вставляет значения из формы в таблицу, называемую «заметки»,
В этот момент он создает две записи в таблице, называемой «отношения», через функцию newRelationship.
Значение переменной «$ note_id» заполняется через mysql_insert_id (); и перешел в указанную выше функцию.
Когда код выполняется, запись успешно добавляется к «заметкам», а столбцу «id» присваивается правильное значение с помощью auto_increment.
Затем в таблицу «отношения» добавляются две записи (как и должно быть).
ОДНАКО, мой mysql_insert_id () продолжает выдавать значение «0» вместо нового идентификатора строки.
Для жизни меня я не могу понять, что я делаю неправильно. Я даже попытался создать новую таблицу с нуля с теми же результатами. Кикером является то, что я использую практически идентичный код в других файлах моего проекта без проблем. Кто-нибудь видит, что я делаю неправильно?
соответствующий код
if ($user->is_loaded()) { if($_POST['project_id']) { $project_id = $_post['project_id']; $long_note = $_POST['long_note']; $created_by = $_POST['created_by']; $note_sql="INSERT INTO notes (`long_note`, `added`, `created_by`) VALUES ('$long_note', '$timenow', '$created_by')"; if (!mysql_query($note_sql,$con)) { die('Error: ' . mysql_error($note_sql)); } else { echo "note created Creating relationship "; $note_id = mysql_insert_id(); echo $note_id; newRelationship($project_id, "project", $note_id, "note"); newRelationship($client_id, "client", $note_id, "note"); echo "note added successfuly"; }
И моя функция
function newRelationship($parent_id, $parent_type, $child_id, $child_type) { global $sql, $con, $timenow; $relationship_sql="INSERT INTO `relationships` (`parent_id`, `parent_type`, `child_id`, `child_type`) VALUES ('$parent_id', '$parent_type', '$child_id', '$child_type');"; if (!mysql_query($relationship_sql,$con)) { die('Error: ' . mysql_error($relationship_sql)); } else { echo $parent_type." ".$parent_id." realationship with ".$child_type." ".$child_id." successful "; } }
Предложение Per @ jack здесь – это таблица моих заметок
CREATE TABLE `notes` ( `id` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT, `contact_id` int(10) NOT NULL, `client_id` int(10) NOT NULL, `status` text NOT NULL, `long_note` text NOT NULL, `added` int(11) NOT NULL, `modified` int(11) NOT NULL, `edit_by` int(10) NOT NULL, `short_note` text NOT NULL, `created_by` int(10) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=295 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
По документации :
Идентификатор, сгенерированный для столбца AUTO_INCREMENT предыдущим запросом об успехе, 0, если предыдущий запрос не генерирует значение AUTO_INCREMENT , или FALSE, если соединение MySQL не установлено.
В документации указано, что он может возвращать только 0
если последний выполненный запрос не генерирует значение AUTO_INCREMENT
, что должно означать, что столбец PRIMARY KEY в notes
неправильно настроен с помощью auto_increment
. Я бы рекомендовал дважды проверить, что столбец PRIMARY KEY в notes
настраивается с помощью auto_increment
(никогда не боится проверять снова!).
Просмотрев ваш пример кода, вы вызываете mysql_insert_id()
сразу после вставки, поэтому между ними не должно возникать противоречивых запросов, чтобы исказить результат.
Единственное, что я вижу, что может вызвать проблему, это то, что вы передаете ресурс MySQL в mysql_query()
, но не в mysql_insert_id()
:
if (!mysql_query($note_sql,$con)) ... $note_id = mysql_insert_id();
Из-за этого может возникнуть конфликт в ресурсах. Попробуйте обновить свой вызов:
$note_id = mysql_insert_id($con);