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);