我有三个领域。
第一个字段是自动编号。(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
答案 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')
我已经删除了第一个参数,因为它是数据库中的一个自动增量。
这应该可以解决这两个错误。