![](/img/trans.png)
[英]INSERT query produces "Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given"
[英]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";
}*/
您的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.