1

これが私のハンドルの作成方法です

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

これは、dbクエリを作成する方法です(短縮):

$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 を取得するにはどうすればよいですか?

4

2 に答える 2

1

関数には別の名前がありlastInsertRowIDます。解決:

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

    return $result;
}
于 2013-01-24T15:26:47.070 に答える
0

クエリの実行に失敗したようです。実行中のクエリを再確認します。たぶん、次のようにNOT NULL列を設定してNULLいますUnable to execute statement: constraint failed in

于 2013-01-24T15:23:11.303 に答える