mysql\u fetch\u array()/mysql\u fetch\u assoc()/mysql\u fetch\u row()/mysql\u num\u rows等。。。期望参数1是资源

我试图从MySQL表中选择数据,但收到以下错误消息之一:

mysql_fetch_array()希望参数1是给定的资源布尔值

这是我的代码:

$username=$\u POST['username'];
$password=$_POST['password'];
$result=mysql_query('SELECT*FROM UserName,比如$UserName');
while($row=mysql\u fetch\u数组($result)){
echo$row['FirstName'];
}

查询可能由于各种原因而失败,在这种情况下,mysql_*和mysqli扩展都将从各自的查询函数/方法返回false。您需要测试该错误条件并相应地处理它

mysql_*extension

注意mysql_uu函数已弃用,并已在php版本7中删除

检查$result,然后将其传递给mysql\u fetch\u数组。您会发现它是false,因为查询失败。有关可能的返回值以及如何处理它们的建议,请参阅mysql\u查询文档

$username=mysql\u real\u escape\u字符串($\u POST['username']);
$password=$_POST['password'];
$result=mysql_查询(“从用户名为“$UserName”的用户中选择*);
如果($result==FALSE){
die(mysql_error());//TODO:更好的错误处理
}
while($row=mysql\u fetch\u数组($result))
{
echo$row['FirstName'];
}

mysqli扩展
程序风格

$username=mysqli\u real\u escape\u字符串($mysqli,$\u POST['username']);
$result=mysqli_query($mysqli,“从用户名为“$UserName”的用户中选择*);
//如果查询出错,mysqli_查询将返回false
如果($result==FALSE){
yourErrorHandler(mysqli_error($mysqli));
}
否则{
//从PHP5.4开始,mysqli_result实现了可遍历,因此您可以将其与foreach一起使用
foreach($结果为$行){
...

oo风格

$username=$mysqli->转义字符串($\u POST['username']);
$result=$mysqli->查询(“从用户名为“$UserName”的用户中选择*);
如果($result==FALSE){
yourErrorHandler($mysqli->error);//或$mysqli->error\u列表
}
否则{
//从PHP5.4开始,mysqli_result实现了可遍历,因此您可以将其与foreach一起使用
foreach($结果为$行){
...

使用预先准备好的语句:

$stmt=$mysqli->prepare('SELECT*FROM UserName-LIKE?');
如果(!$stmt){
yourErrorHandler($mysqli->error);//或$mysqli->error\u列表
}
else if(!$stmt->bind_param('s',$POST['username')){
yourErrorHandler($stmt->error);//或$stmt->error\u列表
}
else if(!$stmt->execute()){
yourErrorHandler($stmt->error);//或$stmt->error\u列表
}
否则{
$result=$stmt->获取结果();
//从PHP5.4开始,mysqli_result实现了可遍历,因此您可以将其与foreach一起使用
foreach($结果为$行){
...

这些示例只说明了应该做什么(错误处理),而不是如何做。生产代码在输出HTML时不应该使用或死,否则它(至少)会生成无效的HTML。此外,数据库错误消息不应该显示给非管理员用户,因为它会泄露太多信息

发表评论