查询返回空,请求参数1为mysqli_result

时间:2016-01-25 12:53:51

标签: php mysqli

我试图显示我的个人资料用户的信息,但是当我测试它时会给我一个空的结果;

  

警告:mysqli_fetch_assoc()要求参数1为mysqli_result,给定字符串

我测试了mysql查询它的工作情况,确实如此,因为它显示了我的echo 'Id user: '.$id_user;所以,我不知道这里发生了什么。

$id_user = $_SESSION["id_usr"];
$consulta = 'SELECT user,name,password,city FROM web_users WHERE id_user=" . mysqli_escape_string($id_user) . "';
$resultado = $mysqli->query($consulta);
echo 'OK<br>';
echo 'Id user: '.$id_user;
/*if ($resultado->affected_rows == 1){*/
   $row = mysqli_fetch_assoc($consulta);
   echo '
      <div class="form_title">User:</div>
      <div class="form_content">'.$row["user"].'</div><br><br>
      <div class="form_title">Name:</div>
      <div class="form_content">'.$row["name"].'</div><br><br>
      <div class="form_title">Password:</div>
      <div class="form_content">'.$row["password"].'</div><br><br>
      <div class="form_title">City:</div>
      <div class="form_content">'.$row["city"].'</div><br><br>';
  /*}
else{
   $row = array();
   echo "<br>Empty Result";
}*/

Here you have what is showing :D

5 个答案:

答案 0 :(得分:0)

你的php有语法错误,当你在查询mysqli_escape_string($ id_user)中需要php代码时,你不能使用',但你可以更新到:

$consulta = 'SELECT user,name,password,city 
FROM web_users WHERE id_user=\'' . mysqli_real_escape_string($con,$id_user) .'\'';

$consulta = "SELECT user,name,password,city 
FROM web_users WHERE id_user='" . mysqli_real_escape_string($con,$id_user) ."'";

其中$con是您的连接对象:

$con=mysqli_connect("localhost","my_user","my_password","my_db");

答案 1 :(得分:0)

根据您的屏幕截图,您将获得UserID = 1,以便您可以像这样使用您的查询:

<?php
    $consulta = 'SELECT user,name,password,city 
    FROM web_users WHERE id_user='.mysqli_escape_string($id_user);
    $result = $conn->query($consulta);
?>

现在关于这个问题:

  

警告:mysqli_fetch_assoc()期望参数1为mysqli_result

// you can use like that:
if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        //your stuff
    }    
} 
else 
{
    echo "0 results";
}
?>

代码中的问题:

实际上,您将Object OrientedProcedural方法混合在一起,并且还使用了错误的变量。

假设您希望以程序方式使用mysqli_fetch_assoc,例如:

$row = mysqli_fetch_assoc($consulta);

,请注意$consulta未返回资源ID,$consulta等于您在字符串中写入的查询。

答案 2 :(得分:0)

您的脚本中有一些错误,请检查它们是否正常工作请用此替换您的查询并告诉我这是否有帮助

<?php
     $id_user =  mysqli_escape_string($_SESSION["id_usr"]);
     $consulta = "SELECT user,name,password,city FROM web_users WHERE id_user='$id_user'";
     $resultado = $mysqli->query($consulta);
     echo 'OK<br>';
     echo 'Id user: '.$id_user;

     $row = mysqli_fetch_assoc($resultado);
?>

希望它可以帮到你

答案 3 :(得分:0)

您需要使用查询中的结果集并循环显示任何结果。此外,您使用的单引号字符串不适用于多行。

尽管如此,你不需要echo。您可以退出PHP处理并在需要变量时重新输入它。

$resultado = $mysqli->query($consulta);
echo 'OK<br>';
echo 'ID user: ' . $id_user;
while($row = $resultado->fetch_assoc())
{
   ?>
      <div class="form_title">User:</div>
      <div class="form_content"><?=$row["user"];?></div><br><br>
      <div class="form_title">Name:</div>
      <div class="form_content"><?=$row["name"];?></div><br><br>
      <div class="form_title">Password:</div>
      <div class="form_content"><?=$row["password"];?></div><br><br>
      <div class="form_title">City:</div>
      <div class="form_content"><?=$row["city"];?></div><br><br>
   <?php
}

此外,您在字符串中使用mysqli_real_escape_string()而没有正确地保留字符串解析。我实际上不会尝试通过逃避字符串来清理输入;准备好的陈述是一个更好的主意...

$consulta = 'SELECT user,name,password,city FROM web_users WHERE id_user = ?';
$stmt = $con->prepare($consulta);
$stmt->bind_param('i', $id_user);
$stmt->execute();

$resultado = $stmt->get_result();
while ($row = $resultado->fetch_assoc())
{

}

注意:您应该防止SQL注入。请查看How can I prevent SQL injection in PHP?

答案 4 :(得分:-1)

试试这个

{{1}}