- ベストアンサー
ユーザー定義関数について
ユーザー定義関数について悩んでます。 ソースファイル <?php $search_key1 = addslashes($_POST['chokusetsu']); $search_key2 = addslashes($_POST['yomi']); $search_key3 = addslashes($_POST['kakusuu']); $search_key4 = addslashes($_POST['busyu']); print $search_key1; //$search1にはきちんと値が入っている require_once("mysql.php");// MySQLへのID・パスワードの取得をするファイルへのアクセス function kensaku($str1,$str2,$str3,$str4){ $GLOBALS["mysql"] = new MySQL; $GLOBALS["sql"] = "SELECT * FROM tankanji WHERE kanji like '%$str1%' AND (onyomi like '%$str2%' OR kunyomi like '%$str2%') AND kakusuu like '%$str3%' AND busyu like '%$str4%'"; } // 検索条件を変数に代入してDB内を検索 kensaku($search_key1,$search_key2,$search_key3,$search_key4); $mysql->query($sql); ?> なんですが、ユーザー定義関数を用いてDB内部を検索しようとしているのですが、$search_key1,$search_key2,$search_key3,$search_key4の値がうまく関数の中で使われなくて悩んでいます。グローバル関数とやらも自分なりには試しましたが、解決しませんでした。 ようは $search_key1 = addslashes($_POST['chokusetsu']); $search_key2 = addslashes($_POST['yomi']); $search_key3 = addslashes($_POST['kakusuu']); $search_key4 = addslashes($_POST['busyu']); の$search_key1,$search_key2,$search_key3,$search_key4を$str1,$str2,$str3,$str4に各々代入してsql文を発行しようとしてますが、うまくいかないのです。 どなたか、原因がわかる方いらっしゃるでようか??
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
確かに構成がちょっと気持ち悪いですねw MySQLってクラスを上手く使った方がいいとは思いますが、 中がどうなっているのかよく分かりません。 addslashesじゃなくて専用のエスケープ処理はその中に入ってないんでしょうか。 <?php //参考に $values = $_POST; $rows = search_kanji($values); print '<table>'; foreach ($rows as $row) { print '<tr><td>' . $row['kunyomi'] . '<td></tr>'; } print '</table>'; funtion search_kanji($values) { $db = new MySQL(); $sql = 'SELECT * FROM ...'; $rs = $db->query($sql); $rows = array(); while ($row = $db->fetch()) { // ? $rows[] = $row; } return $rows; }
その他の回答 (1)
- kasumi_JPN
- ベストアンサー率38% (8/21)
$mysql->query($sql);を print $sql;に置き換えた場合にどう出力されますでしょうか? 個人的には $GLOBALS["mysql"] = new MySQL;が気持ち悪いです
お礼
すいません。php初心者でして、お恥ずかしい。 なぜかいま解決できました。 ついでに質問なんですが、このソースの下に <TABLE width="3000" frame="border" border="3" cellspacing="1" cellpadding="3"> <TBODY> <TR><TH>id</TH><TH>漢字</TH><TH>音読み</TH><TH>訓読み</TH><TH>特殊読み</TH><TH>ピンイン</TH><TH>部首</TH><TH>画数</TH><TH>字源</TH><TH>異体字</TH> <TH>繁体字</TH><TH>簡体字</TH><TH>意味</TH><TH>用例</TH><TH>同訓異字</TH><TH>対義語</TH><TH>品詞</TH><TH>日本語能力検定級</TH><TH>熟語1</TH> <TH>熟語2</TH><TH>熟語3</TH></TR><?php // DB内で検索した条件に一致したものを変数に代入 while($row = $mysql->fetch()){ ?> <TR> <TD align="center"><?=$row['id']?></TD><TD align="center"><?=$row['kanji']?></TD><TD align="center"><?=$row['onyomi']?></TD><TD align="center"><?=$row['kunyomi']?></TD> <TD align="center"><?=$row['tokusyu']?></TD> <TD align="center"><?=$row['pinin']?></TD> <TD align="center"><?=$row['busyu']?></TD> <TD align="center"><?=$row['kakusuu']?></TD> <TD align="center"><?=$row['jigen']?></TD> <TD align="center"><?=$row['itaiji']?></TD> <TD align="center"><?=$row['hantaiji']?></TD> <TD align="center"><?=$row['kantaiji']?></TD> <TD align="center"><?=$row['imi']?></TD> <TD align="center"><?=$row['yourei']?></TD> <TD align="center"><?=$row['doukun']?></TD> <TD align="center"><?=$row['taigigo']?></TD> <TD align="center"><?=$row['hinshi']?></TD> <TD align="center"><?=$row['nihongo']?></TD> <TD align="center"><?=$row['jyukugo1']?></TD> <TD align="center"><?=$row['jyukugo2']?></TD> <TD align="center"><?=$row['jyukugo3']?></TD></TR> <?php } ?> </TBODY></TABLE> </body> </html> が続いていますが、 このhtml部分というかwhile($row = $mysql->fetch()){も関数にうまく組み込みたいのですがどのように記述したらよろしいのでしょうか? rowの中にいれている文字列はDB内のテーブル内の項目の名称です。