mysqliでprepareメソッドがUnknown commandを返す

私的メモ

私のサイト用に作ったクラスライブラリではDB接続にmysqlライブラリを使っているが、mysqli拡張サポートライブラリを使ってセキュリティの強度を上げようと考えた。素のSQL文は問題なく通るが、prepareメソッドとbind_paramメソッドを使って変数をSQL文にバインドしようとするとこけてしまう。

具体的には、prepareメソッドがステートメントオブジェクトを返さずにFALSEを返すため、bind_paramしようとすると「
Fatal error: Call to a member function bind_param() on a non-object」となってしまう。

prepareメソッドがFALSEを返した直後にerrorプロパティをのぞくと、「Unknown command」というメッセージが返っていた。

私が借りているサーバーのphpはmysqliが使える設定になっている。それは素のSQLだと問題なく通ることでもわかる。なぜprepareメソッドはステートメントオブジェクトを返さないのだ?

サーバーの設定をひととおりチェックしたらサーバーに乗ってるMySQLのバージョンが4.0である事に気がついた。mysqliのマニュアルを見ると「4.1以上の新機能が使えるライブラリ」と書いてある。本家MySQLのサイトをチェックすると、4.1の新機能トピックで「Prepared Statements」とある。何のことはない、4.0ではprepared statementsそのものがまだサポートされてなかったのだ。

この事に気づくのに丸一日かかった。

ライブラリが乗ってるから全てのメソッドが使えると頭から決めつけていたのだ。

ウィニー

情報流出が止まらない。

日銀検査資料がネット流出・松江支店、「破綻懸念先」記述も

米軍情報流出で停職30日 空自1尉、ウィニーで

ウィニーや2chを悪者にする論調が目立つが、問題点が違うと思う。

機密資料を外部へ持ち出して自宅にコピーする状況が日常的にあって、それがたまたまウィニーによって露見したという見方のほうが自然だろう。情報の取り扱いの問題であり、特定のソフトや技術の問題にするべきではないと思う。