みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

<大至急!>ご教授願います。

MySQLで作ったお祭りのデータベースからデータを検索し、お祭りの名前と開催地だけを検索結果として表示させるというものを作っています。
しかし、エラーもなにも起きていないのに、検索しても結果が表示されません。検索結果の件数も反映されません。
PHPのプログラムの方にまだ問題があるのでしょうか?それともMySQLの方に問題があるのでしょうか?
また、pearについても質問があります。pear listを実行すると問題なく見ることができるのですが、以下のような警告が表示されます。
PHP Warning: PHP Startup: Unable to load dynamic library 'ext\php_pdo_firebird.
dll' - 指定されたモジュールが見つかりません。
in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'ext\php_pdo_firebird.dll'
- 指定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'ext\php_pdo_oci.dll'
- 指定されたモジュールが見つかりません。
in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'ext\php_pdo_oci.dll' - 指
定されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'ext\php_pspell.dll' -
指定されたモジュールが見つかりません。
in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'ext\php_pspell.dll' - 指定
されたモジュールが見つかりません。
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'ext\php_sybase_ct.dll
' - 指定されたモジュールが見つかりません。
in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'ext\php_sybase_ct.dll' -
指定されたモジュールが見つかりません。

勉強中と言ってもを初心者同然なので、ご教授いただきたいです。よろしくお願いいたします。

Windows7
PHP 5.4.9
MySQL 5.5
Apach 2.2.22
phpMyAdmin 3.5.4

<html>
<head>
<title>PHPのテスト</title>
</head>
<body>
<?php
require_once("MDB2.php");


$dbUser = "root";
$dbPass = "im1907720";
$dbHost = "localhost";
$dbName = "moe_db";
$dbType = "mysql";


$dsn = "$dbType://$dbUser:$dbPass@$dbHost/$dbName";


$conn = MDB2::connect($dsn);


if(MDB2::isError($conn))
{
die($conn -> getMessage());
}

$conn -> disconnect();


//POSTされたデータを受け取り、エスケープします。
$search_key=addslashes($_POST['search_key']);
$search_ken=addslashes($_POST['search_ken']);


$sql= <<<EOS
SELECT * FROM moeinfo WHERE
name like '%$search_key%'
OR
address like '%$search_ken%'
EOS;

/*
if(substr(PHP_OS,0,3) == 'WIN')
{
$sql=mb_convert_encoding($sql, "SJIS", "EUC-JP");
}
*/


$result=$conn->query($sql);
if(MDB2::isError($result))
{
die($result->getMessage());
}



$count=$result->numRows();
print "検索結果は" .$count. "件です。<br>";


if($count> 0){
?>


<table width="450" border="1" cellspacing="0" cellpadding="8">
<tbody>
<tr><th>イベント名</th><th>開催地都道府県名</th></tr>

<?php
while($rs=$result->fetchRow(MDB2_FETCHMODE_ASSOC))
{
if(substr(PHP_OS,0,3) == 'WIN')
{
$rs['name']=mb_convert_encoding($rs['name'], "EUC-JP", "SJIS");
$rs['address']=mb_convert_encoding($rs['address'], "EUC-JP", "SJIS");
}
}
?>


<tr><td aling="center"><?=$rs['name']?></td>
<td><?=$rs['address']?></td>
</tr>

</tbody>
</table>

<?php
}
//mysql_free_result ($result) ;
$result->free();
$conn->disconnect();
?>

</body>
</html>

投稿日時 - 2013-01-15 18:12:33

QNo.7893483

すぐに回答ほしいです

質問者が選んだベストアンサー

何故結果表示が

while($rs=$result->fetchRow(MDB2_FETCHMODE_ASSOC))

のLoopを抜けてからになっているのでしょうか?書くとしたらLoopの内側に書かないとダメです。

while($rs=$result->fetchRow(MDB2_FETCHMODE_ASSOC))
{
if(substr(PHP_OS,0,3) == 'WIN')
{
$rs['name']=mb_convert_encoding($rs['name'], "EUC-JP", "SJIS");
$rs['address']=mb_convert_encoding($rs['address'], "EUC-JP", "SJIS");
}
?>
<tr><td aling="center"><?=$rs['name']?></td>
<td><?=$rs['address']?></td>
</tr>
<?php
}
?>

なお、OSがWindowsかどうかでmb_convert_encodingしている意図はさっぱりわかりません。Windowsとそれ以外のOSで書き方に違いがあるわけはないのですが・・・・。もしWindowsとそれ以外で入力フォームや出力の文字セットを変えているとしても(そういうことをする意味がわかりませんが)MySQLにクライアントの文字セットを通知するだけで済む話です。

また、エスケープにaddslashesを使うのは如何なものかと。プレースホルダを使ってください。

投稿日時 - 2013-01-15 19:01:33

お礼

shimix様、解答ありがとうございます。

while文の部分は、私の書き間違いでした。申し訳ありませんでした。

mb_convert_encodingの部分に関しては、私が知り合いから貰ったPHPの本(速攻!図解プログラミング PHP+MySQL)に、
『Windows版MySQLの場合保存データの文字コードがShift_JISのため、PHPファイル(文字コードはEUC-JP)の中で作成されたSQLを発行すると、文字化けした状態で格納されてしまいます。このため、Windowsで稼働している時のみ、mb_convert_encoding関数で、SQL文の文字コードを「EUC-JP」から「SJIS」へ変換します。』
と書いてありました。
しかし、while文をshimix様のご指摘通り直した結果、文字化けしてしまい、mb_convert_encodingの部分をコメントアウトしたら文字化けも解消されました。

まだまだ勉強不足ですよね。
あきらめずに頑張っていきます。
ありがとうございました。

投稿日時 - 2013-01-15 21:24:21

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

>指定されたモジュールが見つかりません。

そのエラーが出ているなら、貴方が構築した環境に問題があります。
たぶん、apacheかphpのどちらかに原因があるでしょう。
設定ファイル、DLLなど正しく設定もしくは保存されているかを確認して下さい。

投稿日時 - 2013-01-15 18:54:12

お礼

memphis様 解答ありがとうございます。

memphis様のご指摘といろいろ調べた結果、DLLが正しく設定されていなかったため、起こった問題だということが分かりました。

ありがとうございました。

投稿日時 - 2013-01-17 15:20:25

あなたにオススメの質問