Mysql PHP错误 - 登录验证

时间:2014-03-24 09:41:00

标签: php mysql function

Good Day Gents

忙碌在这里真让我沮丧。我正忙着尝试编写一个简单的登录脚本来验证对数据库的登录。

然而我继续得到:

  

警告:mysql_fetch_array()期望参数1是资源,   

中给出的布尔值

这是我的代码....当我在sql workbench上运行查询时,它可以100%运行

<?php

// Grab User submitted information
$email = $_POST['users_email'];
$pass = $_POST['users_pass'];

// Connect to the database
$con = mysql_connect('localhost','root','');
// Make sure we connected succesfully
if(! $con)
{
    die('Connection Failed'.mysql_error());
}

// Select the database to use
mysql_select_db('arctecs',$con);

$result = mysql_query('SELECT users_email, users_pass FROM users WHERE users_email = $email');

$row = mysql_fetch_array($result);

if($row['users_email']==$email && $row['users_pass']==$pass)
    echo'You are a validated user.';
else
    echo'Sorry, your credentials are not valid, Please try again.';
?>

4 个答案:

答案 0 :(得分:2)

这不正确

'SELECT users_email, users_pass FROM users WHERE users_email = $email'

更好的方法是

"SELECT users_email, users_pass FROM users WHERE users_email = '$email'"

需要用单引号包装字符串数据。

POST数据直接在查询中使用,这是不好的。开始使用PDO预处理语句以避免sql注入或至少清理数据

$email = $_POST['users_email'];
$pass = $_POST['users_pass'];
$con = mysql_connect('localhost','root','');
// Make sure we connected succesfully
if(! $con)
{
    die('Connection Failed'.mysql_error());
}

$email = mysql_real_escape_string($email);

答案 1 :(得分:1)

变量不会在单引号下解析。重写如下

$result = mysql_query("SELECT `users_email`, `users_pass` FROM `users` WHERE `users_email` = '$email'") or die(mysql_error());

警告:您的脚本容易受到SQL注入攻击。您需要切换到Prepared Statements.


mysql_*)扩展程序自PHP 5.5.0起已弃用,将来会被删除。相反,应使用MySQLiPDO_MySQL扩展名。切换到PreparedStatements甚至可以更好地抵御SQL注入攻击!

答案 2 :(得分:0)

当您的查询未执行时会发生这种情况,因此请使用mysql_error()来了解错误

$result = mysql_query("SELECT users_email, users_pass FROM users WHERE users_email = $email") or die(mysql_error());

答案 3 :(得分:0)

mysql_query将在错误时返回false。 您还应该考虑使用mysqli扩展。自PHP 5.5.0起,不推荐使用mysql扩展。

请参阅:http://www.php.net/manual/en/function.mysql-query.php

试试这个:

$result = mysql_query('SELECT users_email, users_pass FROM users WHERE users_email = "$email"');
if (!$result) {
    die('Invalid query: ' . mysql_error());
}
相关问题