我已经在下面写了我的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]')";
答案 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