2015-06-11 113 views
-1

我有一个包含以下内容的SQL服务器中的一个简单的表:SQL服务器 - ID主键不自动递增

  • ID(INT) - 主键(标识规范:是的,标识增量:1)
  • 名字 - VARCHAR(50)
  • 名字 - VARCHAR(50)
  • 电子邮件 - VARCHAR(50)

我设置的HTML表格下方插件ERT的数据到这个非常简单的表,其呈现以下错误:

<?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),不automincrementing:

Violation of PRIMARY KEY constraint 'PK_clients'. Cannot insert duplicate key in object 'dbo.clients'.

附件是示出了图像如何id密钥已配置。

在此先感谢。 J enter image description here

+0

这就是“SET IDENTITY_INSERT test.dbo.clients ON”所做的。 –

回答

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 。你将要使用预先准备的语句。就目前而言,您目前允许用户在您的服务器上执行自己的代码

+0

谢谢@David。我知道它很脆弱;我只是刚开始学习一些开发,而我只是在测试。谢谢你的帮助 :) – joebegborg07

0

没有太多的PHP。但因为你想手动插入的标识值改变这一行&使SQL处理身份键值..

$sql_insert = " 
       INSERT INTO test.dbo.clients (FirstName, LastName, email) 
       VALUES('$FirstName', '$LastName', '$email')";