我怎样才能解决php(mssql)中主键的违规问题?

时间:2015-10-26 04:06:53

标签: php database

我有三个领域。

第一个字段是自动编号。(PK)

第二个字段是用户ID。

最后一个字段是用户pw。

无论如何,这是我的代码。此页面由JSON调用。此页面可以呼叫多个用户。所以它应该确保冲突ID。如果id是冲突,则id应自动编号为max。

<?php
$conn=mssql_connect('test_database', 'root', '1357');
if (!$conn) {
return -1;
}
header("Content-Type:application/json");
$id=($_POST['id']);
$userid=($_POST['userid']);
$userpw=($_POST['userpw']);

$sql="INSERT INTO dbo.testTable
           (id
           ,userid
           ,userpw)
     VALUES
           ('$id'
           ,'$userid'
           ,'$userpw')";

function customError($errno,$errstr)
{
    if (strpos($errstr,"Violation of PRIMARY KEY")!==false){
        $query_id="
SELECT id
FROM testTable
order by LEN(id) DESC, id DESC
";
        $result_id=mssql_query($query_id,$conn);
        $id=mssql_result($result_id,0,0)+1;
        $result= mssql_query($sql,$conn);
        echo json_encode($result);
    }
    else{
        echo $errstr;
        die();
    }   
}
set_error_handler("customError");

$result= mssql_query($sql,$conn);
echo json_encode($result);
?>

我尝试使用set_error_handler控制错误消息'违反PRIMARY KEY。

但$ id,$ userid,$ userpw,$ sql不能在set_error_handler函数中使用。

Notice: Undefined variable: sql

1 个答案:

答案 0 :(得分:0)

我建议您删除已添加的功能以检查违规部分。并改变你的第一个查询,

$sql="INSERT INTO dbo.testTable
       (userid// i have removed the id here
       ,userpw)
 VALUES
       ('$userid'// i have removed $id 
       ,'$userpw')";

或者,如果您想要按照您的方法操作,请执行此操作。

首先替换此行,因为您将查询存储在$query_id变量。

$result= mssql_query($sql,$conn);

$result= mssql_query($query_id,$conn);

customError函数中。

接下来,无需将autoincrement id传递给您的数据库,

$sql="INSERT INTO dbo.testTable
       (id
       ,userid
       ,userpw)
 VALUES
       ('$id'
       ,'$userid'
       ,'$userpw')

我已经删除了第一个参数,因为它是数据库中的一个自动增量。

这应该可以解决这两个错误。