-4

重複の可能性:
MYSQL からのデータを表示します。SQL ステートメント エラー

MYSQL データベースからのデータを表示するコードを以下に示します (現在、SQL インジェクションの問題を調べています)。結果が見つからない場合にエラー メッセージを挿入する必要があります。コードを試してみました if( mysql_num_rows($result) == 0) { echo "No row found!" しかし、構文エラーが発生し続けます。コード内の正しい位置を知っている人はいますか?

--

 require 'defaults.php';
 require 'database.php';

 /* get properties from database */

 $property = $_GET['bedrooms'] ;
 $sleeps_min = $_GET['sleeps_min'] ;
 $availability = $_GET['availability'] ;


  $query = "SELECT * FROM `properties` WHERE bedrooms = '{$bedrooms}' AND sleeps_min = '{$sleeps_min}' AND availability = '{$availability}'";
  $row=mysql_query($query);

  $result = do_query("SELECT * FROM `properties` WHERE bedrooms = '{$bedrooms}' sleeps_min = '{$sleeps_min}' AND availability = '{$availability}'", $db_connection);

 while ($row = mysql_fetch_assoc($result))
 {
$r[] = $row;
 }

 ?>
4

2 に答える 2

0

有効な文字列を取得しているかどうかvar_dump($GET_)をデバッグするために実行します。これらのいずれかが空白の場合、クエリは。ではなく空白の値を照合しようとしますNULL。次のようにしてこれを防ぐ必要があります。

if(!$_GET['bedrooms'] || $_GET['bedrooms'] == ''){
$property = 'NULL';
}//repeat for all three

$query = "SELECT * FROM `properties` WHERE 'bedrooms' = '$bedrooms' AND 'sleeps_min' = '$sleeps_min' AND 'availability' = '$availability'";

それ以外の:

while ($row = mysql_fetch_assoc($result)) {
    $r[] = $row; 
}

あなたは簡単に行うことができます:

$r = mysql_fetch_array($query);

ただし、それを条件付きで囲んで、クエリで何かが見つかったかどうかを確認します。

if(mysql_affected_rows() > 0){
  //your code here will execute when there is at least one result
  $r = mysql_fetch_array($query); 
} 
else{//There was either nothing or an error
  if(mysql_affected_rows() == 0){
    //There were 0 results 
  } 
  if(mysql_affected_rows() == -1) {
    //This executes when there is an error 
    print mysql_error(); //not recommended except to debug
  }
}
于 2012-04-26T05:34:13.423 に答える
0

あなたのコードにいくつかのエラーが見つかりました。

$query = "SELECT * FROM `properties` WHERE bedrooms = '{$bedrooms}' AND sleeps_min = '{$sleeps_min}' AND availability = '{$availability}'";
$row=mysql_query($query);

あなたはしかしを使用bedrooms = '{$bedrooms}'$bedrooms is not variable in whole cod it must be $preoperyます。以下のコードにいくつかの変更を加えましたので、お試しください。

        <?php

        require 'defaults.php';
        require 'database.php';

        /* get properties from database */

        /*if get $_GET['bedrooms'] value else ''*/

        if (isset($_GET['bedrooms'])) {
            $property = $_GET['bedrooms'];
        } else {
            $property = '';
        }

        /*if get $_GET['sleeps_min'] value else ''*/

        if (isset($_GET['sleeps_min'])) {
            $sleeps_min = $_GET['sleeps_min'];
        } else {
            $sleeps_min = '';
        }

        /*if get $_GET['availability'] value else ''*/

        if (isset($_GET['availability'])) {
            $availability = $_GET['availability'];
        } else {
            $availability = '';
        }

        $query = "SELECT * FROM `properties` WHERE bedrooms = '" . $property . "' AND sleeps_min = '" . $sleeps_min . "' AND availability = '" . $availability . "'";

        $result = mysql_query($query) or die(mysql_error());

        if ($result) {
            while ($row = mysql_fetch_assoc($result)) {
                $r[] = $row;
            }
        }
        ?>
于 2012-04-26T05:55:36.010 に答える