ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Let's PHPコミュのmysqli の is_resourceについて

  • mixiチェック
  • このエントリーをはてなブックマークに追加
function db_open() {
global $dbhost,$dbuser,$dbpass,$db,$db_type;
$result = @mysqli_connect ($dbhost, $dbuser, $dbpass);
if (is_resource($result)) mysqli_select_db($result,$db) or die ("Could not select DB - CON2".mysqli_error($result));
e DB
if (!is_resource($result)) die ("DB($db_type): {$result} Could not connect to the Database.\n");
return $db_conn;
}

jffnmsというphpベースのサーバー監視ソフトのコードの一部なのですが、mysqli関数に対応させようと思ってコードを書き換えてたのですが、上記のソースで以下のエラーが表示されます。

DB(mysqli): Object id #2 Could not connect to the Database.
Object id #2 が {$result}の値です。

select_db前の is_resource で成功してるはずなのに
そのあとの(!is_resource($result)で失敗してる原因がわかりません。
この原因がわかる方いらっしゃいますでしょうか?

コメント(3)

追記

環境は以下の通りです
fedora core 3,php-5.0.5,mysql4.1.12,apache 2.0
http://php.net/mysqli_select_db


注意: This function should only be used to change the default database for the connection. You can select the default database with 4th parameter in mysqli_connect().

とあります.
特に理由がなければmysqli_connect()でデータベースを指定してはいかがでしょうか?
後当然各種エラー番号・メッセージを取得する関数などで状態取得はもうされたんですよね?
何か気になる情報は出てきていませんでしたか?
どこまで書いていいかわからず、試したことさえも書いてなかったですね、申し訳ないです。

普段mysqli_select_dbは使わないので最初書き換えた時にmysqli_connectで データベースまで指定してました。でも同じ結果だったのでmysqli_select_dbを使ったものに戻しました。

mysqli_error()、mysqli_error($result)などもdieの中に追記して試しましたが何も表示されませんでした。

自作のスクリプトでもmysqliを使用して作ってますが問題が起きてもmysqli_errorで解決できてたので戸惑っています。

ソフトの動作 ------------------------------

認証ページ -> $dbのauthテーブルで照会
OKの場合-> メインページ
NGの場合 -> 認証失敗というログを $dbの'event'テーブルに追加
-------------------------------------------

if (!is_resource($result)) ****
の行をコメントアウトすると
認証は失敗するが認証失敗というログの書き込みには成功したり・・・・。(ソフトのログイン用のアカウント、パスワード
が間違っていないかのチェックは何度も行いました)

具体的には、
・authへのクエリ送信には成功してるっぽい(しかし認証失敗)
・その後、別の関数でデバッグ用のmysqli_pingが5回ほど繰り返されるがその際にはmysqlへの接続事態失敗(しかし実際には認証失敗のログが eventテーブルに1行だけちゃんと追加されてる)


mysql関数が使われているファイルは2つしかなかったので(grepでディレクトリ全体をmysqlで検索)、viで直接編集したのはその2つだけです。(サーバー設定はGUIで用意されてたのを使用したので)それ以外ノータッチなので単純に考えると動くかなと思いましたが、なかなか・・・。


※全てphpで書かれているとはいえ、本来は開発してる本家で質問すべきことだとは思いますが、英文を書く能力に乏しいのと、is_resourceの動作が一番気になってるので投稿させていただきました。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Let's PHP 更新情報

Let's PHPのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング