PHP:mysql\u fetch\u assoc()希望参数1是资源,布尔值在第13行的[file]中给出
我在标题中提到了这个错误,代码如下:PHP:mysql\u fetch\u assoc()希望参数1是资源,布尔值在第13行的[file]中给出,php,mysql,Php,Mysql,我在标题中提到了这个错误,代码如下: <?php session_start(); ob_start(); include("connection.php"); $username = $_POST['username']; $password = $_POST['password']; $query = mysql_query("
<?php session_start();
ob_start();
include("connection.php");
$username = $_POST['username'];
$password = $_POST['password'];
$query = mysql_query("SELECT * FROM users WHERE user_username = '$username' AND user_password = '$password'",$conn)
or die($query. "<br/><br/>".mysql_error());
if($query = mysql_affected_rows() > 0) {
$record = mysql_fetch_assoc($query);
$validuser = $row['username'];
$_SESSION['valid'] = $validuser;
if(isset($_SESSION['valid']))
{
header('Location: index.php');
}
} else { ?>
<script>alert('Username not registered.')
</script>
<?php
}
exit();
?>
您的代码中包含以下内容:
if($query = mysql_affected_rows() > 0) {
mysql\u infected\u rows()
返回受影响的行数。如果大于0,则$query
将为TRUE
,否则将为FALSE
。$query
的值将始终是布尔值
mysql\u fetch\u assoc()
需要一个mysql资源作为其参数,但您将传递一个布尔值。这就是错误的原因
从mysql受影响的行()的文档中
:
获取与链接标识符关联的上次插入、更新、替换或删除查询所影响的行数
另一件事是,您正在运行一个SELECT
语句,您可能需要mysql\u num\u rows()
通常,您的if
语句应该如下所示:
if(mysql_num_rows($query) > 0) {
# code ...
}
您可以使用代码对其进行如下调整:
$num = mysql_num_rows($query);
if($num > 0)
{
while ($record = mysql_fetch_assoc($query))
{
$validuser = $row['username'];
$_SESSION['valid'] = $validuser;
if(isset($_SESSION['valid']))
{
header('Location: index.php');
}
}
}
else
{
# else block ...
}
另外,请注意,mysql\u
函数已被弃用,很快将被删除。为了安全起见,您应该切换到MySQLi或PDO并开始使用参数化查询。在此循环中:
if($query = mysql_affected_rows() > 0)
您正在将$query
分配给表达式的结果。因此,$query
将为True或False
然后在循环中,您正在执行以下操作:
$record = mysql_fetch_assoc($query);
这就是触发错误的地方,因为现在$query
不再是mysql\u query
方法的结果
要解决此问题,请更改您的if条件:
if(mysql_affected_rows() > 0)
您还应该这样做,因为旧的mysql.*
函数将从PHP中删除。更改此代码:
if($query = mysql_affected_rows() > 0) {
$record = mysql_fetch_assoc($query);
$validuser = $row['username'];
为此:
if(mysql_num_rows($query) > 0) {
$record = mysql_fetch_assoc($query);
$validuser = $record['username'];
这里有一个提示:
mysql\u受影响的\u行
仅适用于插入、更新、替换或删除。您需要mysql\u num\u rows
。在PHP中,mysql\u查询调用立即执行查询(它没有设置为需要提交的事务)。第二点你是对的;这应该是OP的另一个问题(最终)。谢谢你让我开心@用户2467945:不客气:)