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 здесь - sql моей таблицы заметок

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

1 ответ

Решение

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

Идентификатор, сгенерированный для столбца 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);
Другие вопросы по тегам