就像标题所说的那样,我希望在INSERT到数据库之后返回行的id。
我有两个函数,一个用于建立与数据库的连接:
function db_connect() {
$host = "host";
$user = "user";
$pwd = "pwd";
$database = "db";
$con;
try{
$conn = new PDO( "sqlsrv:Server= ".$host." ; Database = ".$database." ", $user, $pwd);
}
catch(Exception $e){
die(print_r($e));
}
return $conn;
}
一个要插入新记录:
function setTiptile($name,$cols,$rows) {
$connect = db_connect();
$query = "INSERT INTO data(ID, name, cols, rows) VALUES(NEWID(),?,?,?)";
$stmt = $connect->prepare($query);
$stmt->bindValue(1, $name);
$stmt->bindValue(2, $cols);
$stmt->bindValue(3, $rows);
$stmt->execute();
return $connect->lastInsertId('ID'); // This should work, but doesn't, why?
}
我需要最后一个函数来返回插入行的ID,我应该怎么做?
修改 就像标题所说,ID是一个独特的标识符,不知道是否会改变它。
编辑:好的,显然我必须使用:$connect->lastInsertId('ID');
,但这根本不会返回任何内容。可能是什么原因?新行在数据库中创建。
答案 0 :(得分:1)
来自Manual:
返回上一个插入行的ID,或者来自a的最后一个值 序列对象,取决于底层驱动程序。例如, PDO_PGSQL()要求您指定序列对象的名称 name参数。
应该是这样的:
return $connect->lastInsertId('yourIdColumn');
答案 1 :(得分:0)
$conn->lastInsertId();
答案 2 :(得分:0)
(我的)解决方案:
lastInsertId()的参数必须是表名而不是行名。除此之外,该表必须有一行参数 IDENTITY ,这是返回的行。
这得出结论:使用lastInsertId ()返回一个uniqueidentifier 是不可能的,因为它不能检查参数IDENTITY。
答案 3 :(得分:0)
为什么不首先选择newid() 然后在插入中使用该ID