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

dnph8jn4  于 2021-06-18  发布在  Mysql
关注(0)|答案(24)|浏览(529)

我试图从mysql表中选择数据,但收到以下错误消息之一:
mysql\u fetch\u array()期望参数1是资源,给定布尔值
这是我的密码:

$username = $_POST['username'];
$password = $_POST['password'];

$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

while($row = mysql_fetch_array($result)) {
    echo $row['FirstName'];
}
fafcakar

fafcakar1#

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'") or die(mysql_error());

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

有时会将查询作为 @mysql_query(your query);

egmofgnx

egmofgnx2#

在运行查询之前,请确保没有使用db\u close()关闭数据库:
如果在脚本中使用多个查询,甚至包括包含查询或数据库连接的其他页面,那么

ocebsuys

ocebsuys3#

当查询中出现导致失败的错误时,将显示此错误消息。它将在使用时显示: mysql_fetch_array /
mysqli_fetch_array() mysql_fetch_assoc() /
mysqli_fetch_assoc() mysql_num_rows() / mysqli_num_rows() 注意:如果查询不影响任何行,则不会出现此错误。只有语法无效的查询才会生成此错误。
故障排除步骤
确保已将开发服务器配置为显示所有错误。您可以将其放在文件顶部或配置文件中: error_reporting(-1); . 如果你有任何语法错误,这将指出他们给你。
使用 mysql_error() . mysql_error() 将报告mysql在执行查询时遇到的任何错误。
示例用法:

mysql_connect($host, $username, $password) or die("cannot connect"); 
mysql_select_db($db_name) or die("cannot select DB");

$sql = "SELECT * FROM table_name";
$result = mysql_query($sql);

if (false === $result) {
    echo mysql_error();
}

从mysql命令行或phpmyadmin之类的工具运行查询。如果您的查询中有语法错误,这将告诉您它是什么。
确保你的报价是正确的。查询或值周围缺少引号会导致查询失败。
确保你正在逃避你的价值观。查询中的引号可能会导致查询失败(同时也会导致sql注入。使用 mysql_real_escape_string() 为了逃避你的意见。
确保你没有混合 mysqli_* 以及 mysql_* 功能。它们不是同一事物,不能一起使用(如果你要选一个或另一个坚持 mysqli_* . 原因见下文。)
其他提示 mysql_* 函数不应用于新代码。它们不再得到维护,社区也开始了弃用程序。相反,您应该学习准备好的语句,并使用pdo或mysqli。如果你不能决定,这篇文章将有助于选择。如果你想学习,这里有一个很好的pdo教程。

72qzrwbm

72qzrwbm4#

如果您在这里尝试了所有方法,但都不起作用,那么您可能需要检查mysql数据库排序规则。我的被设定为瑞典的校勘。然后我把它改成了 utf8_general_ci 一切都很顺利。

x7rlezfr

x7rlezfr5#

<?php
      $username = $_POST['username'];
       $password = $_POST['password'];

     $result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '".mysql_real_escape_string($username)."'")or die(mysql_error());
while($row=mysql_fetch_array($result))
  {
 echo $row['FirstName'];
 }
 ?>
dwbf0jvd

dwbf0jvd6#

由于有时数据库未被选中,请检查是否有选中的数据库
检查

mysql_select_db('database name ')or DIE('Database name is not available!');

然后进行下一步

$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

f($result === FALSE) {
    die(mysql_error());
bgtovc5b

bgtovc5b7#

试试这个

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysqli_query('SELECT * FROM Users WHERE UserName LIKE $username');

if($result){
while($row = mysqli_fetch_array($result))
{
    echo $row['FirstName'];
}
}
vwoqyblh

vwoqyblh8#

<?php
    $username = $_POST['username'];
    $password = $_POST['password'];
    $result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '".$username."'");

    while($row = mysql_fetch_array($result))
    {
        echo $row['FirstName'];
    }
?>

如果有一个用户名是唯一的,你可以用“=”来表示。没有必要喜欢。
您的查询将是:

mysql_query("SELECT * FROM Users WHERE UserName ='".$username."'");
4ktjp1zp

4ktjp1zp9#

这里发生的错误是由于使用了单引号( ' ). 您可以将查询如下:

mysql_query("
SELECT * FROM Users 
WHERE UserName 
LIKE '".mysql_real_escape_string ($username)."'
");

它正在使用 mysql_real_escape_string 用于防止sql注入。虽然我们应该使用mysqli或pdoïumysql扩展来升级php版本(php5.5.0及更高版本),但是对于旧版本 mysql_real_escape_string 会成功的。

kkih6yb8

kkih6yb810#

你的代码应该是这样的

$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM Users WHERE UserName LIKE '$username'";
echo $query;
$result = mysql_query($query);

if($result === FALSE) {
    die(mysql_error("error message for the user")); 
}

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

完成后,您将在屏幕上打印查询。在您的服务器上尝试此查询,看看是否产生所需的结果。大多数情况下,错误都出现在查询中。其余代码是正确的。

brjng4g3

brjng4g311#

加引号 $username . 与数值相反,字符串值必须用引号括起来。

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");

而且,使用 LIKE 条件如果你不使用通配符:如果你需要一个完全匹配的使用 = 而不是 LIKE .

o8x7eapl

o8x7eapl12#

首先,检查与数据库的连接。是否连接成功?
如果完成了,那么在那之后我就编写了这段代码,而且效果很好:

if (isset($_GET['q1mrks']) && isset($_GET['marks']) && isset($_GET['qt1'])) {
    $Q1mrks = $_GET['q1mrks'];
    $marks = $_GET['marks'];
    $qt1 = $_GET['qt1'];

    $qtype_qry = mysql_query("
        SELECT *
        FROM s_questiontypes
        WHERE quetype_id = '$qt1'
    ");
    $row = mysql_fetch_assoc($qtype_qry);
    $qcode = $row['quetype_code'];

    $sq_qry = "
        SELECT *
        FROM s_question
        WHERE quetype_code = '$qcode'
        ORDER BY RAND() LIMIT $Q1mrks
    ";
    $sq_qry = mysql_query("
        SELECT *
        FROM s_question
        WHERE quetype_code = '$qcode'
        LIMIT $Q1mrks
    ");
    while ($qrow = mysql_fetch_array($sq_qry)) {
        $qm = $qrow['marks'] . "<br />";
        $total += $qm . "<br />";
    }
    echo $total . "/" . $marks;
}
nhhxz33t

nhhxz33t13#

一个查询可能会因为各种原因而失败,在这种情况下mysql和mysqli扩展都会返回 false 从各自的查询函数/方法。您需要测试错误条件并相应地处理它。
mysql扩展名:
注意mysql函数已经被弃用,在phpversion7中已经被删除。
检查 $result 在把它传给 mysql_fetch_array . 你会发现 false 因为查询失败。看到了吗 mysql_query 可能返回值的文档以及如何处理它们的建议。

$username = mysql_real_escape_string($_POST['username']);
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if($result === FALSE) { 
    die(mysql_error()); // TODO: better error handling
}

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

mysqli扩展
程序样式:

$username = mysqli_real_escape_string($mysqli, $_POST['username']);
$result = mysqli_query($mysqli, "SELECT * FROM Users WHERE UserName LIKE '$username'");

// mysqli_query returns false if something went wrong with the query
if($result === FALSE) { 
    yourErrorHandler(mysqli_error($mysqli));
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
        ...

oo样式:

$username = $mysqli->escape_string($_POST['username']);
$result = $mysqli->query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if($result === FALSE) { 
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

使用准备好的语句:

$stmt = $mysqli->prepare('SELECT * FROM Users WHERE UserName LIKE ?');
if ( !$stmt ) {
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else if ( !$stmt->bind_param('s', $_POST['username']) ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else if ( !$stmt->execute() ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else {
    $result = $stmt->get_result();
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

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

klr1opcd

klr1opcd14#

可能有两个原因:
在调用mysql\u查询函数之前,您是否打开了与数据库的连接?我在你的代码里看不到。在进行查询之前使用mysql\u connect。看到了吗 php.net/manual/en/function.mysql-connect.php 变量$username在单引号字符串中使用,因此不会在查询中计算其值。查询肯定会失败。
第三,查询结构易于sql注入。您可以使用事先准备好的声明来避免这种安全威胁。

6bc51xsx

6bc51xsx15#

$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

使用单引号定义字符串,php不解析单引号分隔的字符串。为了获得变量插值,需要使用双引号或字符串串联(或两者的组合)。看到了吗http://php.net/manual/en/language.types.string.php 更多信息。
您还应该检查mysql\u query是否返回了有效的结果资源,否则fetch\u*、num\u rows等将无法处理结果,因为这不是结果!即:

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

if( $result === FALSE ) {
   trigger_error('Query failed returning error: '. mysql_error(),E_USER_ERROR);
} else {
   while( $row = mysql_fetch_array($result) ) {
      echo $row['username'];
   }
}

http://us.php.net/manual/en/function.mysql-query.php 更多信息。

相关问题