从单个表单插入两个表。第一个插入正常,第二个插件会生成此错误Duplicate entry '0' for key 1
,知道发生了什么?
$connection=mysql_connect ("localhost", "foo", "bar") or die ("I cannot connect to the database.");
$db=mysql_select_db ("database", $connection) or die (mysql_error());
$query = "INSERT INTO worklog (id, newtime, datetime, clientname, clientcode, startmo, startday, startyr, endmo, endday, endyr, duemo, dueday, dueyr, market, job, allTypes, spec, status, designer, dsgnemail, adrep, ademail, frame1, frame2, frame3, rush) VALUES ('$id', $newtime, now(), '$clientname', '$clientcode', '$startmo', '$startday', '$startyr', '$endmo', '$endday', '$endyr', '$duemo', '$dueday', '$dueyr', '$market', '$job', '$allTypes', '$spec', '$status', '$designer', '$dsgnemail', '$adrep', '$ademail', '$frame1', '$frame2', '$frame3', '$rush')";
$sql_result = mysql_query($query, $connection) or die (mysql_error());
$worklog_id=mysql_insert_id($connection);
$connection2=mysql_connect ("localhost", "foo", "bar") or die ("I cannot connect to the database.");
$db2=mysql_select_db ("database", $connection2) or die (mysql_error());
$query2 = "INSERT INTO worklognotes (worklog_id, spec) VALUES ('$worklog_id', '$spec')";
$sql_result = mysql_query($query2, $connection2) or die (mysql_error());
答案 0 :(得分:3)
我瘦的罪魁祸首就是这条线:
$worklog_id=mysql_insert_id($connection);
根据PHP文档:
“前一个查询成功时为AUTO_INCREMENT列生成的ID,如果前一个查询未生成AUTO_INCREMENT值,则为0;如果未建立MySQL连接,则为FALSE”
因此,如果工作日志中的id不是AUTO_INCREMENT,它将始终返回0 ...您第二次尝试运行代码将导致:
密钥1的重复条目“0”
解决此问题的两种方法:
id应为AUTO_INCREMENT ...这样mysql_insert_id将返回数据库生成的ID,您可以将其用作下一个查询的工作ID
只需使用$ id而不是$ worklog_id
答案 1 :(得分:1)
通常使用和表ID列将其设置为自动递增,并且从不显式插入它。数据库管理系统将负责插入该列。该错误意味着您正在插入已具有该ID的行,这意味着该列具有UNIQUE约束。