可捕获的致命错误:类mysqli_result的对象无法转换为字符串

时间:2017-04-13 18:17:36

标签: php sql mysqli

我正在编写显示信息表单。这是一些php的工作:

$link = new mysqli('localhost', 'root', '****', '***');

 if ($link->connect_error) {
     die("Connection failed: " . $link->connect_error);
 } 

 $_GET = array('first_name', 'last_name', 'age', 'year_of_birth', 
         'year_of_death', 'date_of_death', 'month_of_death', 'funeral_home', 
         'city', 'county'); 
      // gets value sent over search form

 $first_name = mysqli_real_escape_string($link, $_REQUEST['first_name']);
 $last_name = mysqli_real_escape_string($link, $_REQUEST['last_name']);
 $age = mysqli_real_escape_string($link, $_REQUEST['age']);
 $year_of_birth = mysqli_real_escape_string($link, 
 $_REQUEST['year_of_birth']);
 $year_of_death = mysqli_real_escape_string($link, 
 $_REQUEST['year_of_death']);
 $date_of_death = mysqli_real_escape_string($link, 
 $_REQUEST['date_of_death']);
 $month_of_death = mysqli_real_escape_string($link, 
 $_REQUEST['month_of_death']);
 $funeral_home = mysqli_real_escape_string($link, 
 $_REQUEST['funeral_home']);
 $city = mysqli_real_escape_string($link, $_REQUEST['city']);
 $county = mysqli_real_escape_string($link, $_REQUEST['county']);

  $sql = mysqli_query($link, "SELECT *
     FROM obituaries  
     WHERE FirstName AND LastName AND Age AND YearOfBirth AND YearOfDeath 
     AND  DateOfDeath AND MonthOfDeath AND FuneralHome AND City AND County
     LIKE ('$first_name' AND '$last_name' AND '$age' AND '$year_of_birth' 
     AND '$year_of_death' AND '$date_of_death' AND '$month_of_death' AND 
          '$funeral_home' AND '$city' AND '$county')");

    $results = mysqli_query($link, $sql);

    if(mysqli_query($link, $first_name)){
       echo "Success ";
  } else{
       echo "ERROR: Not able to execute $sql. " . mysqli_error($results);
     }
  ?>

似乎一切都很好:

  $results = mysqli_query($link, $sql);

 if(mysqli_query($link, $first_name)){
  echo "Success ";
   } else{
      echo "ERROR: Not able to execute $sql. " . mysqli_error($results);
  }
 ?>

当我运行代码时,它给了我2个错误

  
      
  • (!)警告:mysqli_query()要求参数2为字符串,对象在第33行的C:\ wamp \ www \ searchreturntest2.php中给出
  •   

  
      
  • (!)可捕获的致命错误:第38行的C:\ wamp \ www \ searchreturntest2.php中无法将类mysqli_result的对象转换为字符串
  •   

第33行:

  $results = mysqli_query($link, $sql);

第38行:

    echo "ERROR: Not able to execute $sql. " . mysqli_error($results);

我已经盯着这个以及其他解决方案了好几个小时。有人可以帮我弄清楚为什么我会收到这些错误吗?

1 个答案:

答案 0 :(得分:0)

第一个错误已经说明了所有内容:( ! ) Warning: mysqli_query() expects parameter 2 to be string, object given in C:\wamp\www\searchreturntest2.php on line 33

$results = mysqli_query($link, $sql);

此处参数2为$sql。显然这应该是一个字符串,但是给出了一个对象。

$sql = mysqli_query($link, "SELECT *

我们在此处看到mysqli_query被分配到$sql的结果。如果我们阅读it's documentation(请务必养成这样做的习惯),那么我们会读到:

  

对于成功的SELECT,SHOW,DESCRIBE或EXPLAIN查询,mysqli_query()将返回一个mysqli_result对象。

在此声明:我们将获得一个对象。因此,如果您将其提供给需要字符串的方法,您将收到警告。

第二个错误只是意味着将对象自动转换为字符串的尝试失败。开心:无论如何,你不应该依赖这种自动转换。要明确,为了确保1个月后你自己仍然能够理解发生了什么以及为什么(根据我自己的经验这最后一句话)。 : - )