8

MySQL コンソールで次を実行すると、正常に動作します。

INSERT INTO videos (embed_code) VALUES ('test code here');
SELECT LAST_INSERT_ID();

しかし、PHP 経由で上記のクエリを実行すると、結果は空になります。

データ抽象化の下で、私は という名前のデータベース アクセス クラスを使用していますDB。これは、PHPを介して上記のクエリを試した方法です:

$embedCode = htmlentities($_POST['embed_code']);

//Insert video in database **WORKS**
DB::query("INSERT INTO videos (embed_code) VALUES ('$embedCode');");

//Retrieve id **DOES NOT WORK**
$row = DB::getSingleRow("SELECT LAST_INSERT_ID();");
$videoId = $row[0];

Embed_code は繰り返される可能性があるため、embed_code によって新しい ID を選択することは信頼できません。

ありがとう!

4

7 に答える 7

5

データベース クラスに、最後の挿入 ID を取得する関数が含まれていませんか? それ以外の場合は、代わりに mysql_insert_id() を試してください。

http://nl.php.net/mysql_insert_id

于 2010-08-06T16:14:20.863 に答える
1

mysql_insert_idPHP には、クエリと同じ結果が得られるという関数がありますSELECT LAST_INSERT_ID();

于 2010-08-06T16:13:48.937 に答える
0

これには専用の関数があります。SQLバージョンは機能しないため、使用しないでください。

MySQLライブラリでは、mysql_insert_id関数を使用する必要がありますが、mysqliオブジェクトにはinsert-idプロパティがあります。もちろん、これは、使用しているDBクラスですでに公開されている可能性があります。

于 2010-08-06T16:15:37.800 に答える
0

PHPのmysql_insert_id関数で試すことができます。

何が起こっているのかというと、各DB::query呼び出しは異なるトランザクションで$row行われているため、空になっていると思います。たぶん、DB:queryドキュメントを読んで、同じトランザクション内で両方の呼び出しを実行してみることができます。

于 2010-08-06T16:15:48.097 に答える
0

クラスの外側に PDO の lastInsertId を返す必要があります。例:

class DB
{
    public $last_insert_id;
    function x()
    {
        $stmt = $db->prepare($Query);
        $stmt->execute();
        $this->last_insert_id = $db->lastInsertId();
    }    
}
于 2016-01-07T10:13:57.573 に答える
0

mysql_insert_id は、PHP 5.5.0 以降非推奨としてマークされています。

この例では、uid がテーブル ビデオの主キーです。

$row = DB::getMultipleRows("SELECT uid FROM videos WHERE uid=LAST_INSERT_ID();");
if (
    isset($row) &&
    is_array($row) &&
    isset($row['0']) &&
    is_array($row['0']) &&
    isset($row['0']['uid'])
) {
    $videoId = $row['0']['uid'];
}
于 2015-06-15T13:21:34.980 に答える