sql >> データベース >  >> RDS >> Mysql

pdo lastInsertIdはzero(0)を返します

    PDO_MySQLでは、使用する必要があります

    $DB->setAttribute(PDO::ATTR_EMULATE_PREPARES,TRUE); // there are other ways to set attributes. this is one
    

    次のような複数のクエリを実行できるようにします:

    $foo = $DB->prepare("SELECT * FROM var_lst;INSERT INTO var_lst (value) VALUES ('durjdn')");
    

    しかし悲しいことに、そうすることで$DBが正しい挿入IDを返すのを防ぎます。挿入IDを取得できるようにするには、それらを個別に実行する必要があります。これにより、正しい挿入IDが返されます:

    $DB->setAttribute(PDO::ATTR_EMULATE_PREPARES,TRUE);
    $foo = $DB->prepare("INSERT INTO var_lst (value) VALUES ('durjdn')");
    $foo->execute();
    echo $DB->lastInsertId();
    

    しかし、これはしません:

    $DB->setAttribute(PDO::ATTR_EMULATE_PREPARES,TRUE);
    $foo = $DB->prepare("SELECT * FROM var_lst;INSERT INTO var_lst (value) VALUES ('durjdn')");
    $foo->execute();
    echo $DB->lastInsertId();
    

    これでは、2つのクエリも実行されません:

    $DB->setAttribute(PDO::ATTR_EMULATE_PREPARES,FALSE); // When false, prepare() returns an error
    $foo = $DB->prepare("SELECT * FROM var_lst;INSERT INTO var_lst (value) VALUES ('durjdn')");
    $foo->execute();
    echo $DB->lastInsertId();
    


    1. 挿入する前に重複を確認してください

    2. ローカルコンピュータ上のMySQLサービスが開始してから停止しました

    3. CASE ..OracleSQLのWHEN式

    4. PostgreSQLを使用する1つのエンティティ用の複数のHibernateシーケンスジェネレータ