
php pear mdb2に質問です。
以下の関数でエラーが出ます。
間違っているところがあれば、回答お願いします。
function product_info($id) {
global $db;
$res = $db->query("SELECT * FROM product WHERE id=?",
array($id));
if ($res != null) {
$row = $res->fetchrow(MDB2_FETCHMODE_ASSOC);
return $row;
}
return null;
}
No.1ベストアンサー
- 回答日時:
具体的なエラー内容を教えてください。
そうでないと判断のしようがありません。とりあえず考えられる原因としては、DBはちゃんとオープンできていますか?
---ここから---
$db =& MDB2::connect("…");
if( MDB2::isError($db) ) {
print "connect error: ".$db->getMessage();
}
---ここまで---
といった感じで、$dbを代入してる所でエラーチェックしてみてください。
それと、queryの結果は、エラー時にはエラーであるという情報が入ってますので、nullとの比較ではエラー判定できません。
原因究明のため、「if ($res != null)」の部分は、以下のようにエラー内容を表示させるようにしてみてください。
---ここから---
if (MDB2::isError($res)) {
print "query error: ".$res->getMessage();
} else {
return $row;
}
---ここまで--
これで、具体的にどういうエラーが出るのか教えていただければ、状況は判断しやすくなるかと思います。
この回答への補足
回答、ありがとうございます。DBはオープンできていますが、$resはエラーがでました。(query error: MDB2 Error: syntax error)元々のエラーは、(Fatal error: Call to undefined method MDB2_Error::fetchRow() in C:\xampp\htdocs\webapp\dblib.php on line 30)です。
補足日時:2010/07/06 21:44回答、ありがとうございます。pear mdb2で関数の引数の値でmysqlの連想配列を取得したかったのですが、なかなかうまくできなかったです。($res = $db->query("SELECT * FROM product WHERE id=?", array($id));)このコードが問題で他を探したのですが、だめでした。
No.2
- 回答日時:
回答1の者です。
さっきの回答では、query内容をちゃんと見てなかったのですが、もしかして、Prepared Statement を使おうとされてますか?
そうだとしたら、MDB2 のquery では無理です。(queryの第二引数は戻り値の型の指定です)
prepared statement を使う時は、query の代わりに prepare と execute を使って、
以下のようにしてください。
---
$stat = $db->prepare("SELECT * FROM product WHERE id=?", null, MDB2_PREPARE_RESULT);
if (MDB2::isError($stat) {
print "prepare error: ".$stat->getMessage();
return null;
}
$res = $stat->execute(array($id));
if( MDB2::isError( $res ) ) {
print "execute error: ".$res->getMessage();
return null;
}
$row = $res->fetchRow(MDB2_FETCHMODE_ASSOC);
if( MDB2::isError( $row ) ) {
print "fetchRow error: ".$row->getMessage();
return null;
}
return $row;
---
のようにしてください。
あるいは、MDB2_Extended モジュールを入れれば
(予め $db->loadModule('Extended'); しておけば)
---
$res = $db->getRow("SELECT * FROM product WHERE id=?", null, array($id));
if (MDB2::isError($res)) {
print "getRow error: ".$res->getMessage();
return null;
}
return $res;
---
のように簡単に書くこともできます。
(getRow は、prepare と execute と fetchRow を、まとめて実行してくれるメソッドです
なお、質問者さんが最初に
> 元々のエラーは、(Fatal error: Call to undefined method MDB2_Error::fetchRow() in …
と出た理由ですが、MDB2は、エラー時にはエラー型のインスタンスを返すようになっています。
そのため、エラー時の戻り値は、メソッド fetchRow を持たないため「fetchRow というメソッドは定義されていない」というエラーになるわけです。
(逆にgetMessage はエラー時のみ使えるメソッドであり、エラーが発生してない時に使うと、getMessage が Call to undefined method になってしまいます)
そのため、MDB2を使う際は、MDB::isError で戻り値をちゃんとチェックすることが重要になってきます。
回答、ありがとうございます。最初は、prepareを使って(MDB2::isError($stat))この部分にエラーが出ていました。ここのエラーの部分を削除して、実行したら、うまく動きました。どういう訳か削除した部分を戻しても動きました。??? いずれにしても、目的は達成できました。ありがとうございました。また機会があれば、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- Access(アクセス) 実行時エラー3131 FROM 句の構文エラーです について 7 2022/06/13 15:45
- PHP PHP MySql ページング 2 2022/09/20 06:38
- PostgreSQL 画像とカテゴリーを出力したいのですが、取得の条件を付ける方法がわかりません。 2 2022/05/01 18:03
- Access(アクセス) docmd.gotorecordを起動するには 5 2022/06/17 15:20
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
トランザクションが原因?DBに...
-
日本語をGETで渡す場合UR...
-
SELECTの値を保持する
-
ある条件に当てはまったときに...
-
fsockopenの例外について
-
require_once で読み込まれたか?
-
フォントの色を変えるには?
-
関数の引数に未定義の変数を渡...
-
PHP、unpack関数でのエラー
-
「file_get_contents」で「HTTP...
-
phpでクラスのメソッドで同名の...
-
phpのエラー(T_LNUMBER)について
-
[php初心者]サイトを見てデータ...
-
ローカル環境でのメール送信
-
JSPにてMySQLのBLOB型の画像の...
-
PHPのsafemodeとは?
-
ユーザー認証でユーザーID毎に...
-
【file_exists】ファイルが存在...
-
URLの変わらないページをPHPで...
-
フォームで戻った際に入力済み...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フォントの色を変えるには?
-
トランザクションが原因?DBに...
-
PHPでネットワークドライブのop...
-
Localeクラスについて
-
PHPにて外部サイト内容が取得不...
-
PHP8を使うと、大量のWarningが...
-
PHPで、エラーがない場合のみ画...
-
「@$変数」の「@の意味は?」
-
パースエラーとは?
-
require_once で読み込まれたか?
-
PHP.iniの設定に関して
-
SELECTの値を保持する
-
これは例外処理でしょうか?
-
phpのエラー(T_LNUMBER)について
-
ある条件に当てはまったときに...
-
ワードプレスサイト PHP8.0.25...
-
正規表現での最後尾のバックス...
-
PHPでfatal errorが出ても無視...
-
PHPでSMTPを使ってメール送信で...
-
Oracleに接続できません
おすすめ情報