Php SQL Server-id主键不自动递增
我在sql server中有一个简单的表,其中包含以下内容: id int-主键标识规范:是,标识增量:1 名字-varchar 50 LastName-varchar 50 电子邮件-varchar50 我在下面设置了html表单,将数据插入到这个非常简单的表中,该表显示以下错误:Php SQL Server-id主键不自动递增,php,sql-server,Php,Sql Server,我在sql server中有一个简单的表,其中包含以下内容: id int-主键标识规范:是,标识增量:1 名字-varchar 50 LastName-varchar 50 电子邮件-varchar50 我在下面设置了html表单,将数据插入到这个非常简单的表中,该表显示以下错误: <?php require ('connect.inc.php'); if(ISSET($_POST['FirstName'])&&ISSET($_POST['LastName'])&am
<?php
require ('connect.inc.php');
if(ISSET($_POST['FirstName'])&&ISSET($_POST['LastName'])&&ISSET($_POST['email'])){
if(!empty($_POST['FirstName'])&&!empty($_POST['LastName'])&&!empty($_POST['email'])){
$FirstName = $_POST['FirstName'];
$LastName = $_POST['LastName'];
$email = $_POST['email'];
$sql_insert = "SET IDENTITY_INSERT test.dbo.clients ON
INSERT INTO test.dbo.clients (id, FirstName, LastName, email)
VALUES('', '$FirstName', '$LastName', '$email')";
$sql_select = "SELECT * FROM test.dbo.clients";
$sql_insert_query = odbc_exec($con, $sql_insert);
}
else{
echo "Please input fields";
}
}
else{
echo "Not set";
}
/*$sql = "INSERT INTO clients ()
VALUES ()"
*/
?>
<html>
<body>
<table border="2">
<form action="inputform.php" method="POST">
<tr>
<td>First name:</td>
<td><input type="text" name="FirstName"></td>
</tr>
<tr>
<td>Last name:</td>
<td><input type="text" name="LastName"></td>
</tr>
<tr>
<td>e-mail:</td>
<td><input type="text" name="email"></td>
</tr>
<tr>
<td><input type="submit" name="submit" value="submit"></td>
</tr>
</form>
</table>
</body>
</html>
下面的错误表示id PK不是自动删除:
违反主键约束“PK_客户端”。无法插入
对象“dbo.clients”中存在重复密钥
附件是显示如何配置id密钥的图像
提前谢谢。
J对php的了解不多。但是改变这一行&让sql处理标识键值
$sql_insert = "
INSERT INTO test.dbo.clients (FirstName, LastName, email)
VALUES('$FirstName', '$LastName', '$email')";
因为您正在尝试手动插入标识值。请注意,在启用的位置:
SET IDENTITY_INSERT test.dbo.clients ON
请注意您的INSERT语句:
INSERT INTO test.dbo.clients (id, FirstName, LastName, email)
VALUES('', '$FirstName', '$LastName', '$email')
数据库引擎将提供自动增量标识,除非您告诉它不要这样做。这就是你正在做的。在数字列中插入空字符串、插入空主键等都是非常糟糕的想法
如果希望数据库提供标识,则不要在代码中提供标识:
INSERT INTO test.dbo.clients (FirstName, LastName, email)
VALUES('$FirstName', '$LastName', '$email')
另外,请注意,您的代码非常容易受到攻击。你会想利用事先准备好的陈述。目前,您正在允许用户在您的服务器上执行自己的代码。这就是SET IDENTITY_INSERT test.dbo.clients on的功能。谢谢@David。我知道它很脆弱;我刚刚开始学习一些开发,我只是在测试。感谢您的帮助: