繁体   English   中英

查询返回空值,期望参数1为mysqli_result

[英]Query returns empty, expects parameter 1 to be mysqli_result

我试图显示我的个人资料用户的信息,但是当我进行测试时,结果却是空的。

警告: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";
}*/

在这里,你有什么显示:D

您的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");

根据您的屏幕截图,您将获得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 Oriented方法和Procedural方法混合在一起,并且还使用了错误的变量。

假设,如果您想通过mysqli_fetch_assoc方式使用mysqli_fetch_assoc

$row = mysqli_fetch_assoc($consulta);

比起注意, $consulta不会返回资源ID, $consulta等于您在字符串中编写的查询。

您的脚本中存在一些错误,请检查它们是否可以正常工作,请用此查询替换您的查询,并让我知道是否有此帮助

<?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);
?>

希望对您有帮助

您需要使用查询中的结果集并遍历所有结果。 此外,您使用的单引号字符串不能在多行上使用。

不过,您无需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注入。 看一看如何防止PHP中的SQL注入?

尝试这个

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


$con->your connection string.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM