5

我发誓我已经在这个网站和其他网站上倾注了所有其他类似的问题......但我认为我只是错过了一些东西。希望有人能指出我的大脑对我隐藏的愚蠢错误。:)

我的脚本将表单中的值插入到名为“notes”的表中

此时,它通过一个名为 newRelationship 的函数在名为“relationships”的表中创建两个条目。

变量“$note_id”的值是通过我的 mysql_insert_id(); 填充的。并传入上述函数。

执行代码时,该条目成功添加到“notes”中,并且“id”列被赋予了 auto_increment 适当的值。

接下来,将两个条目添加到“关系”表中(应该如此)。

但是,我的 mysql_insert_id() 不断踢出一个值“0”而不是新的行 ID。

对于我的生活,我无法弄清楚我做错了什么。我什至尝试从头开始创建一个具有相同结果的新表。更重要的是,我在项目的其他文件中使用了几乎相同的代码,没有任何问题。有人看到我做错了什么吗?

有问题的代码

    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 ";
}

}

根据@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
4

1 回答 1

8

根据文档

上一个查询成功时为 AUTO_INCREMENT 列生成的 ID,如果上一个查询没有生成 AUTO_INCREMENT 值,则为 0,如果没有建立 MySQL 连接,则为 FALSE。

文档声明它只能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);
于 2012-10-08T04:33:24.333 回答