SQLite3和last_insert_rowid

时间:2013-01-24 15:11:04

标签: php sqlite lastinsertid last-insert-id

这就是我创建句柄的方式

$this->_handle = new SQLite3($this->_dbname);

这是我进行数据库查询(缩短)的方法:

$stmt = $this->_handle->prepare($sql);
// execute query
$result = $stmt->execute();
// get all results
while($row = $result->fetchArray(SQLITE3_ASSOC)){
    $res[] = $row;
}

现在我想获取最后插入的ID。我这样试过:

public function last_insert_rowid()
{
    $result = sqlite_last_insert_rowid($this->_handle);
    var_dump($result);
    echo '<pre>';
    print_r($result);
    echo '</pre>';
    return $result;
}

我收到此错误:

  

警告:sqlite_last_insert_rowid()期望参数1为   资源,在...... 444行上给出的对象NULL

修改:这不起作用,因为我必须使用sqlite_open()打开它。

我也试过这段代码:

function last_insert_rowid(){
    global $db;

    $sql = "SELECT last_insert_rowid();";
    $result = $db->ExecuteQuery($sql);
    var_dump($result);
    return $result;
    //return ($db->last_insert_rowid());
}

我收到以下错误消息:

  

NULL警告:SQLite3Stmt :: execute()[sqlite3stmt.execute]:无法执行   执行语句:约束失败..

错误指向此行$stmt->execute();

如何获取上次插入的ID?

2 个答案:

答案 0 :(得分:1)

该函数有另一个名称lastInsertRowID。 解决方案:

public function last_insert_rowid()
{
    //$result = sqlite_last_insert_rowid($this->_handle);
    $result = $this->_handle->lastInsertRowID();

    return $result;
}

答案 1 :(得分:0)

在我看来,查询无法执行。我会仔细检查正在运行的查询。如NOT NULL

所示,您可能会将NULL库存设为Unable to execute statement: constraint failed in