Jun 11, 2012

PHPのMySQLライブラリーが改良されたので対応する(その1)


http://jp2.php.net/manual/ja/function.mysql-query.php
の mysql_query()関数のヘルプを見直ししたら
次のように書いてあった

<<< 引用開始
----------------------------------------------
mysql_query

(PHP 4, PHP 5)

mysql_query  MySQL クエリを送信する

代替策について

この拡張モジュールを使うことはおすすめできません。
MySQLi あるいは PDO_MySQL を使うべきです。
詳細な情報は MySQL: API の選択 や それに関連する FAQ を参照ください。
この関数の代替として、これらが使えます。

mysqli_query()
PDO::query()
----------------------------------------------
>>> 引用終了

で、サーバー会社(hostmonster, USA)に問い合わせしたら
mysql_query の代りに mysqli_query にするほうが好ましいと
英語で回答が来た。

で、自分のアプリがどんな MySQLライブラリ関数を利用しているか
まず調査することにした。

SSHで接続できるているので、次の(へたくそな)コマンドの反復で
調査ができた。

  grep mysql_ *.php */*.php
の結果で出てきた関数名(たとえば mysql_query)を
  sed 's/mysql_query//'
で、隠してしまい、さらに grep mysql_ で調べて
何も無くなるまで繰り返す。

最初は、
  grep mysql_ *.php */*.php
次は、
  grep mysql_ *.php */*.php | sed 's/mysql_real_escape_string//' | grep mysql_
その次は、
  ...

結果、次のようなべたでへたくそなコマンドになった。

grep mysql_ *.php */*.php
 | sed 's/mysql_real_escape_string//'
 | sed 's/mysql_fetch_assoc//'
 | sed 's/mysql_query//'
 | sed 's/mysql_error//'
 | sed 's/mysql_num_rows//'
 | sed 's/mysql_connect//'
 | sed 's/mysql_close//'
 | sed 's/mysql_select_db//'
 | sed 's/mysql_insert_id//'
 | sed 's/mysql_data_seek//'
 | sed 's/mysql_affected_rows//g'
 | sed 's/mysql_real_escape_string//g'
 | sed 's/mysql_result//g'
 | sed 's/mysql_free_result//'
 | grep mysql_

つまり、ここに出てきた mysql_ の関数を利用しているのである。

次の記事は、これらをどの新しい mysqli_ の関数にするかを調査することにします。