我想在表格中插入一个新行.我希望自动生成id,而不是用户询问.用户仅提供标题和文本.我用PHP编写了这段代码:
$hostname = "localhost";
$database = "mydb";
$username = "myuser";
$password = "mypsw";
$link = mysql_connect( $hostname , $username , $password ) or
die("Attention! Problem with the connection : " . mysql_error());
if (!$link)
{
die('Could not connect: ' . mysql_error());
}
mysql_query("SET NAMES ‘utf8’",$link);
mysql_select_db("mydb", $link);
$lastid=mysql_insert_id();
$lastid=$lastid+1;
$sql="INSERT INTO announcements VALUES ('$lastid',CURDATE(),'$_POST[title]','$_POST[text]')";
if (!mysql_query($sql,$link))
{
die('Error: ' . mysql_error());
}
mysql_close($link);
header("Location: announcement.php");
?>
可悲的是,当我在我的网站上测试它时,我收到此错误:
Error: Duplicate entry ‘0’ for key ‘PRIMARY’
mysql_insert_id()无效吗?怎么了?
解决方法:
问题是你要求最后一个插入ID,你没有插入任何东西.
>如果不是,则将db中的ID字段转换为自动增量.
>将您的公告插入数据库
>然后使用mysql_insert_id请求id来获取它.
但我发现你只是在插入时才使用它,然后无论如何你都不需要这个功能.只需插入没有这样的ID
"insert into announcements (InsertDate, Title, Text) VALUES (CURDATE(), '$_POST[title]', '$_POST[text]')";
在使用$_POST或$_GET或任何其他用户输入值的值时,您应该非常小心查询.有可能通过表单字段执行SQLInjection,所以我建议你使用mysql escape命令或使用参数.
我希望这有帮助.
标签:php,mysql,insert
来源: https://codeday.me/bug/20190713/1451057.html