PHP返回ID [uniqueidentifier]在sql INSERT之后

时间:2013-11-22 14:04:20

标签: php sql prepared-statement uniqueidentifier

就像标题所说的那样,我希望在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');,但这根本不会返回任何内容。可能是什么原因?新行在数据库中创建。

4 个答案:

答案 0 :(得分:1)

来自Manual

  

返回上一个插入行的ID,或者来自a的最后一个值   序列对象,取决于底层驱动程序。例如,   PDO_PGSQL()要求您指定序列对象的名称   name参数。

应该是这样的:

return $connect->lastInsertId('yourIdColumn');

答案 1 :(得分:0)

使用lastInsertId

$conn->lastInsertId(); 

答案 2 :(得分:0)

(我的)解决方案:

lastInsertId()的参数必须是表名而不是行名。除此之外,该表必须有一行参数 IDENTITY ,这是返回的行。

这得出结论:使用lastInsertId ()返回一个uniqueidentifier 是不可能的,因为它不能检查参数IDENTITY。

答案 3 :(得分:0)

为什么不首先选择newid() 然后在插入中使用该ID