0

私はこの問題についてグーグルをよく検索してきましたが、実際には何も見つかりませんでした。人々は、last_insert_id に関する MySQL ドキュメントをコピーし続けるだけで、他には何もありません。

両方の状況 (php と sql) で 0 が返されるため、last_insert_id に関する問題があります。

はい: PRIMARY & UNIQUE フィールドに AUTO_INCREMENT 値を設定しました はい: 前に挿入を行いました いいえ: INSERT AND SELECT LAST で二重クエリを作成します... 機能しません。

接続とクエリを維持するためのクラス Db を作成しました。

class Db
{
private function connect()
{
    $db = new mysqli($this->db_host, $this->db_user, $this->db_pass, $this->db_name, $this->db_port);
    if(mysqli_errno($db))
    {
        file_put_contents(date('Y-m-d').'mysql_error.txt',mysqli_error($db),FILE_APPEND | LOCK_EX);
        echo "Connection error";
        exit();
    }
    else
    {
        return $db;
    }
}

    public function insert($i_what, $i_columns, $i_values, $i_duplicate='') { 
    $insert = $this->connect()->query("INSERT INTO ".$i_what.$i_columns.$i_values.$i_duplicate);
    $last_id = $this->connect()->insert_id;
    $this->connect()->close();
    return $last_id; }
}

id  int(11)         AUTO_INCREMENT PRIMARY UNIQUE
name            varchar(32) utf8_general_ci     
firstname   varchar(64) utf8_general_ci
    lastname    varchar(64) utf8_general_ci

そして、それは機能しません。

4

1 に答える 1

2

必要なのは常識だけです。

あなたが説明した問題はありそうもない問題です。だから - もう一度確認する必要があります。
すでに何百もの質問があり、オープニング ポスターは 100% で、すべて正しく行われました。初めに。
そして、それらのすべてで、あるデータベースに挿入して別のデータベースから選択するなどの愚かな間違いが判明しました。

私が言ったように。ええ、接続を閉じません。何らかの理由で、すべてのデータベース呼び出しに対して完全に新しいものを開くだけです。まったく新しいクリーンな接続が 0 を返すのも不思議ではありません。

独自のクラスを作成する代わりに、 https://github.com/colshrapnel/safemysqlのような既製のクラスを使用することをお勧めします

それははるかに安全で便利です。そして、挿入IDを返します

于 2013-11-02T09:50:20.917 に答える