• 締切済み

エスケープでエラーが出ます。

$search_query = "select SQL_CALC_FOUND_ROWS * from king"; $usersearch= htmlentities($_GET['usersearch']); $clean_search = str_replace('、', ' ',$clean_search); $clean_search = str_replace(' ', ' ',$usersearch); $search_words = explode(' ', $clean_search); $final_search_words = array(); if (count($search_words) > 0) { foreach ($search_words as $word) { if (!empty($word)) { $final_search_words[] = $word; } } } // Generate a WHERE clause using all of the search keywords $where_list = array(); if (count($final_search_words) > 0) { foreach($final_search_words as $word) { $where_list[] = "syou LIKE '%$word%'"; } } $where_clause = implode(' AND ', $where_list); // Add the keyword WHERE clause to the search query if (!empty($where_clause)) { $search_query .= " WHERE $where_clause"; } $pid = intval($_GET['pid']); if ($pid < 1) $pid = 1; $limit_start_rows = ( $pid - 1 ) * 10; $search_query .= " LIMIT {$limit_start_rows}, 10"; $result = mysql_query($search_query); $num_rows_result = mysql_query("SELECT FOUND_ROWS()"); $num_rows = mysql_fetch_assoc($num_rows_result); $num_rows = $num_rows['FOUND_ROWS()']; if($num_rows== 0){ $message="該当データは見つかりませんでした。"; } else $message=$num_rows ."件該当しました<br/>"; echo $message; while($row = mysql_fetch_array($result) 2行目のhtmlentities()を外すと正常に動作しますが、この関数を付けるとエラーが出てしまいます。 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ドメイン 76です。ちなみに76は、ここに提示している最後のwhile~です、よろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数0

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

htmlentitiesを使う場面を間違っています。こんなところで使うものではありません。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1277791292 --- 転記ここから あらゆる局面で、そのケースに応じた(適切な)エスケープをする。という大前提を忘れないこと(これが一番肝要)。 --- 転記ここまで

関連するQ&A

  • これでSQLインジェクション対策できてますか??

    $search_query = "select SQL_CALC_FOUND_ROWS * from king"; $usersearch= mysql_real_escape_string($_GET['usersearch']); $clean_search = str_replace('、', ' ',$clean_search); $clean_search = str_replace(' ', ' ',$usersearch); $search_words = explode(' ', $clean_search); $final_search_words = array(); if (count($search_words) > 0) { foreach ($search_words as $word) { if (!empty($word)) { $final_search_words[] = $word; } } } // Generate a WHERE clause using all of the search keywords $where_list = array(); if (count($final_search_words) > 0) { foreach($final_search_words as $word) { $where_list[] = "syou LIKE '%$word%'"; } } $where_clause = implode(' AND ', $where_list); // Add the keyword WHERE clause to the search query if (!empty($where_clause)) { $search_query .= " WHERE $where_clause"; } $pid = intval($_GET['pid']); if ($pid < 1) $pid = 1; $limit_start_rows = ( $pid - 1 ) * 10; $search_query .= " LIMIT {$limit_start_rows}, 10"; $result = mysql_query($search_query); $num_rows_result = mysql_query("SELECT FOUND_ROWS()"); $num_rows = mysql_fetch_assoc($num_rows_result); $num_rows = $num_rows['FOUND_ROWS()']; if($num_rows== 0){ $message="該当データは見つかりませんでした。"; } else $message=$num_rows ."件該当しました<br/>"; echo $message; while($row = mysql_fetch_array($result) 2行目でGETした文字をmysql_real_escape_string()で囲っただけですが大丈夫でしょうか。。

    • ベストアンサー
    • PHP
  • ページングでの問題点

    <?php DB接続文等 $search_query = "select SQL_CALC_FOUND_ROWS * from ilab"; $usersearch= $_POST['usersearch']; $clean_search = str_replace('、', ' ',$clean_search); $clean_search = str_replace(' ', ' ',$usersearch); $search_words = explode(' ', $clean_search); $final_search_words = array(); if (count($search_words) > 0) { foreach ($search_words as $word) { if (!empty($word)) { $final_search_words[] = $word; } } } // Generate a WHERE clause using all of the search keywords $where_list = array(); if (count($final_search_words) > 0) { foreach($final_search_words as $word) { $where_list[] = "syou LIKE '%$word%'"; } } $where_clause = implode(' AND ', $where_list); // Add the keyword WHERE clause to the search query if (!empty($where_clause)) { $search_query .= " WHERE $where_clause"; } $pid = intval($_GET['pid']); if ($pid < 1) $pid = 1; $limit_start_rows = ( $pid - 1 ) * 10; $search_query .= " LIMIT {$limit_start_rows}, 10"; $result = mysql_query($search_query); $num_rows_result = mysql_query("SELECT FOUND_ROWS()"); $num_rows = mysql_fetch_assoc($num_rows_result); $num_rows = $num_rows['FOUND_ROWS()']; if($num_rows== 0){ $message="該当データは見つかりませんでした。"; } else $message=$num_rows ."件該当しました<br/>"; echo $message; ?> <?php $pid = $_GET['pid']; $countRe=$num_rows; pager($_GET["pid"],$countRe); function pager($pid,$countRe){ if($pid=="") $pid=1; $maxPage=ceil($countRe/10); if($maxPage==1 or $maxPage<$pid) return false; if($pid>10){ $startPage=$pid-9; $startMore="<a href=\"$PHP_SELF?pid=".($startPage -1)."\">&lt; PREV</a>"; }else{ $startPage=1; } if($pid+10<$maxPage){ $endPage=$pid+10; $endMore=" <a href=\"$PHP_SELF?pid=".($endPage+1)."\">NEXT &gt;</a>"; }else{ $endPage=$maxPage; } $page_footer=""; for($i=$startPage;$i<=$endPage;$i++){ $page_footer.=" ".(($pid==$i)?"<span style='font-Size:120%'>$i</span>":"<a href=\"$PHP_SELF?pid=$i\">$i</a>"); } $page_footer=$startMore.$page_footer.$endMore; print $page_footer."<br>"; } ?> このソースだとテキストボックスに未入力だと、全件表示してしまいます。 そして、例えば、「東京」等で検索し、12とリンクがつくわけですが、2を押したら東京の2の情報ではなく、全件データの2(10件~20件)が表示されてしまいます。どうすれば上記問題点を改善できるでしょうか??

    • 締切済み
    • PHP
  • 全角スペースを半角スペースに変換

    $str = mb_convert_kana($usersearch, "s", "EUC-JP"); $usersearch= $_POST['usersearch']; 上記のソースを記述し、htmlのテキストボックス(usersearch)内にある全角スペースを半角にしようと試みるのですが、上手く変換されません。何か解決策はないでしょうか?? 全体的にはこのようなソースです。 $search_query = "select * from kensaku2"; $str = mb_convert_kana($usersearch, "s", "EUC-JP"); $usersearch= $_POST['usersearch']; $clean_search = str_replace(',', ' ', $usersearch); $search_words = explode(' ', $clean_search); $final_search_words = array(); if (count($search_words) > 0) { foreach ($search_words as $word) { if (!empty($word)) { $final_search_words[] = $word; } } } // Generate a WHERE clause using all of the search keywords $where_list = array(); if (count($final_search_words) > 0) { foreach($final_search_words as $word) { $where_list[] = "syou LIKE '%$word%'"; } } $where_clause = implode(' AND ', $where_list); // Add the keyword WHERE clause to the search query if (!empty($where_clause)) { $search_query .= " WHERE $where_clause"; } よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 単語ではなく複数語検索

    $usersearch =$_POST['usersearch']; $query = "select byou,syou from kensaku2 where syou like '%{$_POST['usersearch']}%' OR syou like '%{$_POST['usersearch']}%'"; $where_list = array(); $search_words = explode(' ', $usersearch); foreach ($search_words as $word){ $where_list[]= " syou like '%$word%'"; } $where_clause = implode('or',$where_list); if (!empty($where_clause)) { $search_query .= " WHERE $where_clause"; } $result = mysql_query($query); while($row = mysql_fetch_array($result)){ echo '<strong>ドリンク:</strong>' . $row['byou'] . '<br/>'; echo '<strong>野菜:</strong>' . $row['syou'] . '<br/>'; } 上記のものでテキストボックスに[コーラ お茶]等の複数のワードで検索し、その二つに該当するデータを取り出したいのですが、上手くいきません(単語でないと検索できません)。改変部分等御指摘下さい。

    • ベストアンサー
    • PHP
  • PHPとMySQLで配列で検索する方法

    プログラミング初心者です。 PHPとMySQLでデータベースを作成しています。 配列に格納したデータを既に登録してあるデータに参照して、日付と題名が同じものは登録しないようにしたいと思います。 以下がソースなのですが、2行目でエラーがでてしまいます。そうすればよいかご教授お願いします。 for($j=1; $j<$i; $j++){ $query ="select * from data where date=" . $date2[$j]; $result = mysql_query($query) or die(mysql_error()); $query2 ="select * from data where sub=" . $sub[$j]; $result2 = mysql_query($query2) or die(mysql_error()); if(mysql_num_rows($result) != 0 && mysql_num_rows($result2) != 0){ //登録しない } else{      //データベースに登録

    • 締切済み
    • PHP
  • 検索しても何故か空白ページに

    $usersearch =$_POST['usersearch']; $query = "select * from kensaku2 where syou like '%{usersearch}%}'"; $result = mysql_query($query); while($row = mysql_fetch_array($result)){ echo $row['byou']; echo $row['syou']; } usersearchの値を受け取り、syouカラムに該当するデータがあれば表示するというソースのつもりですが、カラムに該当するワードをテキストボックスに入れても何故かsyou,byouのデータが表示されません。hiddenで受け取った所、valueにきちんとワードは入ってました。

    • ベストアンサー
    • PHP
  • mysqlの検索結果からある範囲の行数を取り出すには

    mysqlの検索結果からある範囲の行数を取り出すにはどうすればいいのでしょうか?たとえば検索結果から100~200行の間の行数を取り出すには、   ・   ・ $count=1; $result=mysql_query($sql); $rows=mysql_num_rows($result); while ($row=mysql_fetch_array($result)) { ・・・・ if( $count <= 99 ){ $count++; continue;} として99行目まで読み飛ばす処理をする以外に方法がありますか。 もっと効率よく取り出す方法があったら教えてください。

    • ベストアンサー
    • PHP
  • php5+Mysql5による条件検索とその表示方法が上手く動作しないのでどなたかご指摘をお願いします。

    phpにて条件検索を行っているのですが、『where』以下を$変数にすると動かなくなってしまいます。記述部分で何が間違っているのでしょうか? 以下記述↓ <? $link = db_con(); //←DB接続 $sql = "select * from tbl where id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ?> ここまで↑ を下記のように『where』以下を$変数にして代入 $変数した場合↓ <? $where .= "id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; $link = db_con(); //←DB接続 $sql = "select * from tbl where $where "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ?> ここまで↑ どなたかご指摘をお願いします。

  • PHP&MySQLのエラー(syntax)への対処

    PHPとMySQLを使った検索プログラムを作ってみているのですが、実際に動かしてみると、検索結果表示画面に以下のようなエラーがでます。 SELECT * FROM (テーブル名) where You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 いろいろとPHPに関するサイトやQ&Aを見て考えてみたのですが、解決策がわかりません。 アドバイス、ご指摘の程お願い戴けないでしょうか。 以下が検索結果表示のコードになります。 <body> <?php $debug = false; //DB Connect $url = "localhost"; $user = "ユーザー名"; $pass = "パスワード"; $db = "DB名"; $link = mysql_connect($url,$user,$pass) or die("No Connected"); $sdb = mysql_select_db($db,$link) or die("No Connected"); if($debug) echo_r($HTTP_POST_VARS); //Error Check //Request Method Check if($_SERVER["REQUEST_METHOD"] != "POST") { echo "Error: invalid method"; exit(); } //Create Query $query = "SELECT * FROM テーブル名"; //Create Search Criteria $where = array(); if (isset($_POST['type'])and($_POST['type'] !== '')) { $where[] = sprintf("(type='%s')", mysql_real_escape_string($_POST['type'])); } if (isset($_POST['name'])and($_POST['name'] !== '')) { $where[] = sprintf("(name='%s')", mysql_real_escape_string($_POST['name'])); } if (isset($_POST['address'])and($_POST['address'] !== '')) { $where[] = sprintf("(address like '%%%s%%')", mysql_real_escape_string($_POST['address'])); } if (isset($_POST['description'])and($_POST['description'] !== '')) { $where[] = sprintf("(description like '%%%s%%')", mysql_real_escape_string($_POST['description'])); } if (count($where <> 0)) { $query .= ' where ' . implode('and', $where); } //Result $result = mysql_query($query) or die($query . '<br />' . mysql_error() . '<hr />'); $num_rows = mysql_num_rows($result); ?> <h2>Search Result</h2><br> <?php if($num_rows == 0) { $message = "No date"; } else { $message = $num_rows ."hits"; echo $message; } ?> <table> <tr> <td>Type</td> <td>Company</td> <td>Address</td> <td>Description of Business</td> </tr> <?php while($row = mysql_fetch_assoc($result)): ?> <tr> <td><?php echo $row['type']; ?></td> <td><?php echo $row['name']; ?></td> <td><?php echo $row['address']; ?></td> <td><?php echo $row['description']; ?></td> </tr> <?php endwhile; ?> </table> </body> 解決策をご指導よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • phpとMysQLの連携がうまくいきません

    現在phpとmysqlを連携させて、phpのフォームから文字を入力してmysqlのデータベース上からマッチした検索結果を表示するプログラムを作っているのですがなかなかうまくいきません・・・ お手数ですが詳しい方解答お願いいたします。 <html> <head> <title>PHP SEARCH RESULT</title> <meta http-equiv="Content-type" content="text/html;charset=utf-8"> </head> <body> <? $debug = false; //DB接続 mysql_connect("localhost","root","c0106426"); mysql_select_db("network"); if($debug) print_r($HTTP_POST_VARS); //エラーチェック //リクエストメソッドチェック if($REQUEST_METHOD != "POST") { print "Error: invalid method"; exit(); } //クエリ生成 $query = "SELECT * FROM yougo "; //検索条件生成 //用語 if(!empty($yougo)) { $yougo = yougo($yougo); $where .= "yougo REGEXP '$yougo' && "; } if(!empty($where)) { $where = substr($where, 0, -4); $where = "WHERE " . $where; } $result = mysql_query($query); $num_rows = mysql_num_rows($result); if($num_rows == 0) $message = "該当するデータはありませんでした"; else $message = $num_rows . "件ヒットしました"; ?> 検索結果<br> <?=$message?> <table border=1> <tr><td>用語</td><td>説明</td><td>講義回数</td></tr> <? while($row = mysql_fetch_assoc($result)): ?> <tr><td><?=$row[yougo]?></td><td><?=$row[sestumei]?></td><td><?=$row[kougi]?></td></tr> <? endwhile; ?> </table> <a href="search.html">再検索</a> </body> </html> このようなプログラムを書いているのですがうまく動作しません。。。 フォームからはyougoという形でpostで値をこのphpプログラムに渡しています。 データベースはnetworkという名前で テーブルはyougoid,yougo,sestumei,yomi,kougi,kai というテーブルがありまして yougoの文字を文字入力で検索して yougo,sestumei,kougi内の内容をテーブルで表示させたいのですが、 どうしてもうまくいきません。 よろしくお願いいたします。

    • 締切済み
    • PHP

専門家に質問してみよう