scope
嗨,这是我的代码&我收到此错误消息:
警告:mysqli_fetch_array()期望参数1为mysqli_result, 第6行给出的对象
这是第6行&正如您所看到的,我已经包含了 $ con 这是我的数据库连接。
while($ row_messages = mysqli_fetch_array($ con,$ run_messages)){
所以我真的不知道这里发生了什么......如果你知道如何解决这个问题请告诉我,请提前知道!
答案 0 :(得分:1)
<?php
if (isset($_GET['hash'])&&!empty($_GET['hash'])){
$hash = mysqli_escape_string($con, $_GET['hash']);
$message_query = "SELECT from_id, message FROM message WHERE hash='$hash'";
$run_messages = mysqli_query($con,$message_query);
while($row_messages = mysqli_fetch_array($run_messages, MYSQLI_ASSOC)){
$from_id = $row_messages['from_id'];
$message = $row_messages['message'];
$user_query = "SELECT username FROM admins WHERE id='$from_id'";
$query_run = mysqli_query($con, $user_query);
$run_user = mysqli_fetch_array($query_run, MYSQLI_ASSOC);
$from_username = $run_user['username'];
echo "<p><strong>$from_username</strong></p></br>";
}
}else{
header('Location: messages.php');
}
?>
基本上,mysqli_fetch_array有一个必需参数,即查询结果和结果类型的可选查询。 $run_messages
是第一个查询的结果,将用于执行mysql_fetch_array
,而MYSQLI_ASSOC
是您将使用的可选类型,因此您可以访问$ row_messages中的值你这样做。
阅读mysqli_fetch_array了解详情。
此外,请记住在允许将数据查询到数据库之前,使用mysqli_escape_string来转义用户。这减少了SQLi的机会。
答案 1 :(得分:0)
<强> mysqli_fetch_array 强>
mysqli_fetch_array(mysqli_result $ result [,int $ resulttype = MYSQLI_BOTH])
第一个参数是Specifies a result set identifier returned by mysqli_query()
,第二个参数是result type
删除连接作为第一个参数
这将是
$row_messages = mysqli_query($run_messages,MYSQLI_ASSOC);
您的代码是开放的sql注入更好地使用绑定语句
http://php.net/manual/en/mysqli-stmt.bind-param.php
要检查连接中的错误并使用
查询/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
if (!$mysqli->query("SET a=1")) {
printf("Errormessage: %s\n", $mysqli->error);
}
http://php.net/manual/en/mysqli.error.php
在第二个查询中,您使用
$user_query = "SELECT username FROM admins WHERE id='$from_id'";
TYPO在这里
$form_id !=$from_id
将此更改为
$user_query = "SELECT username FROM admins WHERE id=' $form_id'";