如何将自动增量值存储到php变量中?

时间:2016-06-26 09:27:29

标签: php sql auto-increment

我已经在下面写了我的sql并且它有效。当我将我的particulars_id设置为自动增量时,我必须使用Last_Insert_ID()以便数据库使用自动增量来使用下一个id。但是,我想将该值存储到php变量中。那可能吗?

 $addquery = "INSERT INTO Particulars (Particulars_ID, Name, Identification_Number, Number, Nationality, Status, Remarks)
                    VALUES(LAST_INSERT_ID(),'$_POST[newname]', '$_POST[newic]','$_POST[newnumber]','$_POST[newnationality]','$_POST[newstatus]','$_POST[newremarks]')";

1 个答案:

答案 0 :(得分:1)

当您在具有AUTO_INCREMENT字段的表中插入行时,该字段将自动递增,顾名思义。您不需要告诉MySQL增加它,您也不必为自动增量字段提供一个的值。

首先,从查询中删除对LAST_INSERT_ID()的调用:

$addquery = "INSERT INTO Particulars (Name, Identification_Number, Number, Nationality, Status, Remarks)
                '$_POST[newname]', '$_POST[newic]','$_POST[newnumber]','$_POST[newnationality]','$_POST[newstatus]','$_POST[newremarks]')";

请注意我是如何从查询中完全删除Particulars_ID的。

其次,这与您的问题没有直接关系,但您的查询容易受到SQL注入攻击。接受用户输入时,应避免将其与查询连接,而应使用Prepared Statements并修改您的查询,如下所示:

$addquery = "INSERT INTO Particulars (Name, Identification_Number, Number, Nationality, Status, Remarks)
VALUES(?,?,?,?,?,?)";

然后,您可以准备一个语句并绑定$_POST中的值。这基本上消除了用户输入。阅读有关预准备陈述的更多信息here

START OF EDIT

使用?将实际值绑定到PDO占位符的示例:

//First prepare the statemt
$db->prepare("INSERT INTO Particulars (Name, Identification_Number, Number,Nationality, Status, Remarks)
              VALUES(?,?,?,?,?,?)";
//Start binding values to placeholders
$db->bindValue(1, $_POST['name']);
$db->bindValue(2, $_POST['Identification_Number'];
$db->bindValue(3, $_POST['Number'];
//Bind the rest of the values in the same way

END OF EDIT

关于最后插入的行的ID,您需要运行单独的查询来获取它。因此,在运行上述查询并且插入成功后,您可以 运行这样的查询:

SELECT LAST_INSERT_ID() AS id FROM Pariculars