【问题标题】:MYSQL Results; no records found statement [duplicate]MYSQL 结果;没有找到记录声明[重复]
【发布时间】:2012-04-26 03:42:50
【问题描述】:

可能重复:
Display Data From MYSQL; SQL statement error

我有下面的代码显示来自 MYSQL 数据库的数据(目前正在研究 sql 注入问题)当没有找到结果时,我需要插入一条错误消息...不确定将其放置在哪里!我已经尝试过代码 if( mysql_num_rows($result) == 0) { echo "没有找到行!"但是不断出现语法错误,有人知道代码中的正确位置吗?

--

 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;
 }

 ?>

【问题讨论】:

  • 没有不同的问题为减号欢呼
  • 以冗长的描述形式发布代码的减号。很难在代码中找到 PHP 语法错误“我已经尝试过代码但不断出现语法错误”
  • 没有语法错误,但我只想知道我把语句放在哪里...$row = mysql_query($query) or die(mysql_error());
  • 戴夫,你没有在晚上完成你的其他问题。你在哪里定义你的do_query() 函数? $row 正在被覆盖,而据我所知,$result 没有在任何实际工作的地方定义。在期待帮助之前学习使用 Stack。见鬼,在那之前学习基本的PHP。
  • but keep on gettin syntax errors - 这是你自己的话。你必须先下定决心,而不是来提问

标签: php mysql sql database


【解决方案1】:

我在您的代码中发现了一些符合要求的错误

$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;
            }
        }
        ?>

【讨论】:

    【解决方案2】:

    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
      }
    }
    

    【讨论】:

    • 似乎使用if( !empty( $_GET['bedrooms'] ) ) { } 会是一个更简单的条件。
    • 你是对的。我没想到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多