我在sql server中有一个包含以下内容的简单表:
我已经设置了下面的html表单,将数据插入到这个非常简单的表中,该表出现以下错误:
<?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)不是自动增量:
违反PRIMARY KEY约束'PK_clients'。无法插入 对象'dbo.clients'中的重复键。
附件是显示如何配置id键的图像。
提前致谢。 Ĵ
答案 0 :(得分:3)
因为您尝试手动插入标识值。请注意启用它的位置:
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')
此外,请注意您的代码 极易受攻击 至SQL injection attacks。您将要使用预准备语句。目前,您目前正在允许用户在您的服务器上执行自己的代码。
答案 1 :(得分:0)
没有太多的PHP。但改变这条线和&amp;让sql处理身份密钥值..
$sql_insert = "
INSERT INTO test.dbo.clients (FirstName, LastName, email)
VALUES('$FirstName', '$LastName', '$email')";