Intereting Posts
Javascript Child Window Оставайтесь на вершине php изменить размер изображения после загрузки и обрезать его в центр Ширина пользовательского изображения Instagram API Ларавельные сеансы, восстанавливающиеся при каждой нагрузке Если я уже использую PDO, то в чем преимущество дальнейшего абстрагирования запросов SELECT в Eloquent ORM Laravel? Включить все функции в php-файл, который мне нужен, или только те функции, которые мне нужны? Установите флажок «Вставить или Обновить таблицу». PHP-подход к магии питона __getattr __ () Curl POST to HTTPS url дает ошибку SSLRead () Как анализировать URL-адрес Zend для параметров? Выбор списка игнорирует первое значение при использовании функции onchange, PHP, JAVASCRIPT Как вызвать вид в другом представлении с помощью cakephp Группировка контроллеров Laravel в папках Не удается найти индекс FULLTEXT, соответствующий списку столбцов (установлены индексы) Подготовленные заявления Php Включите эмуляцию

mysql_insert_id (); не возвращать значение после успешной вставки строки

Клянусь, я налил и перелил все другие подобные вопросы на этом сайте и другие … но я думаю, что я просто что-то упустил. Надеюсь, кто-то может указать глупую ошибку, что мой мозг скрывается от меня. 🙂

Мой скрипт вставляет значения из формы в таблицу, называемую «заметки»,

В этот момент он создает две записи в таблице, называемой «отношения», через функцию 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);