最近知ったこと

  • 投稿日:
  • by
  • カテゴリ:
  • タグ:

チェックボックスを並べて選択させたものを、次のページにPOSTして処理するときに、歯抜けの配列ができます。
PHPのfor文でループするときに、配列のcountを最大数にしちゃうと、添字の方が大きかったりしてうまくいきません。
これまでは歯抜けにならない配列をわざわざ用意して、それで回していました。

歯抜けになっている配列について、添字の最小と最大を知るにはどうしたらいいんでしょうか?

最大添字を取得するには - Yahoo!知恵袋

添字を配列で返す array_keys() と、
配列の最大値を返す max() を組み合わせて、
 
max(array_keys($a));
 
とすればOK.

なるほど。 ということは、最小を知りたいならmin()ですね。


EBOMとMBOMをつなぐために、MBOM側テーブルに自動採番(Auto_increment)のカラムを追加しました。
EBOMの中から手配する部品を選択したら、MBOMにレコードを追加する訳ですが、その時に自動採番された番号をEBOM側テーブルのカラムに書きこんでやる必要があります。

MBOMにレコードを追加した結果、新しく採番された値を知るためには、どうすればよいのでしょうか?

MySQLのAUTO_INCREMENTで生成された値を簡単に取得する方法 - Webプログラマー+WebデザイナーなZARU日記

方法としては2つあり、PHPの関数 mysql_insert_id() で取得する方法と、MySQLの関数 last_insert_id() で取得する方法があります。

PHPの関数の方が簡単だそうですが、カラムの型がBIGINTだと正しい値を返してくれないそうです。 MBOMのインデックスも BIGINTなのでダメですね。

そこでMySQLの関数を使ってやってみたのですが、どうやってもゼロが返ってきます。 でも phpMyAdmin で INSERT 文に続けて SELECT last_insert_id() を実行すると、ちゃんと取得できます。

last_insert_id() は同じ接続での直近のクエリについて値を返してくるのですが、自分の場合は1つのクエリを発行するごとに PHPが MySQLへの接続と解除をしているからかな?


という訳で、別の方法をとりました。

MySQL :: auto increment(オートインクリメント):次の値を取得する [Tipsというかメモ]

あるテーブルにレコードをインサートする前に、どうしても「次の auto increment の値」を取得する必要があったのでメモ。
 
mysql 5.0.37 で検証
以下のクエリを実行します。
 
SHOW TABLE STATUS WHERE Name = 'テーブル名'

んでもって、「Auto_increment」カラムの値を取得すればいい訳ですね。

それにしても、そろそろデータベースへの同時書き込みについての対策をちゃんとやらねば(えっ?)。