我试图从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。此外,数据库错误消息不应该显示给非管理员用户,因为它会泄露太多信息