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

Mysql_fetch_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'];
}

当前回答

试试这个,它必须工作,否则您需要打印错误来指定您的问题

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

$sql = "SELECT * from Users WHERE UserName LIKE '$username'";
$result = mysql_query($sql,$con);

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

其他回答

试试这段代码,它工作得很好

将post变量赋给变量

   $username = $_POST['uname'];

   $password = $_POST['pass'];

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

if(!empty($result)){

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

传统上,PHP对代码中的错误实践和失败是宽容的, 这使得调试非常困难。 在这个特定的情况下,问题是mysqli和PDO 默认情况下,查询失败时不告诉你,只返回FALSE。 (我不会谈论被废弃的mysql扩展。 对预处理语句的支持是切换到PDO或mysqli的充分理由。) 但是您可以更改PHP的默认行为,在查询失败时总是抛出异常。

对于PDO:使用$ PDO ->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

error_reporting(E_ALL);

$pdo = new PDO("mysql:host=localhost;dbname=test", "test","");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$result = $pdo->query('select emal from users');
$data = $result->fetchAll();

这将显示以下内容:

致命错误:未捕获的异常'PDOException'与消息'SQLSTATE[42S22]:列未找到:1054未知列'emal'在'字段列表"在E:\htdocs\test\mysql_errors\pdo.php第8行 PDOException: SQLSTATE[42S22]:列未找到:1054在E:\htdocs\test\mysql_errors\pdo.php第8行“字段列表”中未知列“emal

如您所见,它准确地告诉您查询有什么问题,以及在代码中的哪里修复它。

没有$pdo->setAttribute(pdo::ATTR_ERRMODE, pdo::ERRMODE_EXCEPTION); 你会得到

致命错误:在E:\htdocs\test\mysql_errors\pdo.php第9行调用成员函数fetchAll(

mysqli:使用mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

error_reporting(E_ALL);

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'test', '', 'test');

$result = $mysqli->query('select emal from users');
$data = $result->fetch_all();

你会得到

致命错误:未捕获的异常'mysqli_sql_exception'与消息'未知列'emal'在'字段列表"在E:\htdocs\test\mysql_errors\mysqli.php第8行 mysqli_sql_exception:在E:\htdocs\test\mysql_errors\mysqli.php第8行“字段列表”中的未知列“emal

没有MYSQLI_REPORT_ERROR (MYSQLI_REPORT_STRICT);你只能得到

致命错误:在E:\htdocs\test\mysql_errors\mysqli.php的第10行调用成员函数fetch_all(

当然,您可以手动检查MySQL错误。 但如果每次我打错字都要这么做,我会疯掉的 或者更糟——每次我想查询数据库的时候。

试试下面的代码。它可能会工作得很好。

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

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

如果数据库未选中,请检查,因为有时数据库未选中

检查

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

MySQL查询前 然后进入下一步

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

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

这里发生的错误是由于使用了单引号(')。你可以这样写你的查询:

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

它使用mysql_real_escape_string来防止SQL注入。 虽然我们应该使用MySQLi或PDO_MYSQL扩展的升级版本的PHP (PHP 5.5.0及以后),但对于旧版本mysql_real_escape_string将做的把戏。