【问题标题】:PHP Return ID[uniqueidentifier] after sql INSERTsql INSERT 后 PHP 返回 ID [uniqueidentifier]
【发布时间】:2013-11-22 14:04:19
【问题描述】:

正如标题所说,我希望在 INSERT 到数据库之后返回一行的 id。

我有 2 个函数,一个用于连接数据库:

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');,但这根本没有返回任何内容。这可能是什么原因?新行已在数据库中创建。

【问题讨论】:

  • 他们没有使用 MySQL

标签: php sql sql-server uniqueidentifier


【解决方案1】:

来自Manual

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

应该是这样的:

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

【讨论】:

  • 试过了,不行!就我而言,应该是;返回 $connect->lastInsertId('ID');对吗?
  • 是更正了我的答案@Jeroen
【解决方案2】:

使用lastInsertId

$conn->lastInsertId(); 

【讨论】:

    【解决方案3】:

    (我的)解决方案:

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

    由此得出的结论是,不可能使用 lastInsertId() 返回唯一标识符,因为这不能检查参数 IDENTITY。

    【讨论】:

      【解决方案4】:

      为什么不先做一个 select newid() 然后在插入中使用该 id

      【讨论】:

      • 您能否尝试将其表述为答案而不是问题?
      • 欢迎您,谢谢@rolf oosting,您写的内容更有可能是评论而不是回答,因此将其改写为更有条理的答案会更有条理。
      猜你喜欢
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多