3

PHP 関数 mysql_insert_id() は、mysql db で INSERT クエリを処理した後に結果を返さないことがありますか?

明確にするために。本番サイトで cron によって実行されるスクリプトがありました。ユーザー向けの請求書を生成するためのサイクルが含まれていました。各反復は、INSERT db クエリと、生成された請求書番号を取得するためにクエリの直後に実行される mysql_insert_id() 操作で構成されます。最後に挿入された数値を取得せずに一連の反復が実行されました。

db サーバーの負荷が高いことが原因でしょうか、それとも php コード サイトの問題に関連していないその他の理由でしょうか?

どんな助けでも大歓迎です!

4

2 に答える 2

3

ついでに、MySQL が ID を返さないいくつかのケースを考えることができます。

  • 挿入しようとしているテーブルにはAUTO_INCREMENTed 主キーがありません。
  • 一度に複数の行を挿入しています。
  • クエリが実行されたmysql_insert_id()接続とは別の接続から呼び出しています。INSERT
  • クエリが成功しませんでしたINSERT(たとえば、デッドロックが発生しました)。からの戻り値を確認していることを確認してからmysql_query()、 と を使用mysql_errno()mysql_error()ます。

MySQL のドキュメントには、条件の完全なリストと、この関数がどのように機能するかについての詳細があります

もちろん、使用している MySQL のバージョンによっては、MySQL にバグがある可能性もあります。

于 2010-09-06T20:11:28.700 に答える
0

シェルスクリプトを介してコマンドを実行している場合は、次のように両方を別々に実行します。


mysql -e "insert into table ( field1 ) values ( 'val1' );" "database"

lastId=`mysql -e "select last_insert_id();" "database"`

その後、2 番目の呼び出しがサーバーへの新しい接続を確立するため、これは機能しません。単一のデータベース呼び出し/接続内ですべてが行われるため、次のようなことを行う必要があります。


lastId=`mysql -e "
                  insert into table ( field1 ) values ( 'val1' );
                  select last_insert_id();
                 " "database"`

フォーマットとヘッダー行を削除するには、MySQL コマンドに必要な追加のパラメーターを調べる必要があります。

于 2010-09-06T20:23:03.037 に答える