PHP中的mysql_fetch_assoc()错误

时间:2013-01-14 07:14:24

标签: php html mysql

我正在运行以下代码,但它给了我以下错误。我读了几篇关于SO的文章,仍然没有用。 我得到的错误是:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/xyz/public_html/13/beta/signup.php on line 49
Warning: Cannot modify header information - headers already sent by (output started at /home/xyz/public_html/13/beta/signup.php:49) in /home/xyz/public_html/13/beta/signup.php on line 69

我的PHP脚本:(我已标记了行49& 69

if(isset($_POST['submit'])&&$_POST['submit']=='Login')
{
    $err = array();
    if(!$_POST['username'] || !$_POST['pass'])
        $err[] = 'All the fields must be filled in!';

    if(!count($err))
    {
        $_POST['username'] = mysql_real_escape_string($_POST['username']);
        $_POST['pass'] = mysql_real_escape_string($_POST['pass']);
        $_POST['remember'] = (int)$_POST['remember'];

        $row = mysql_fetch_assoc(mysql_query("SELECT id,user,email,clg FROM users WHERE user='{$_POST['username']}' AND pass='".md5($_POST['pass'])."'"));-->line 49

        if($row['user'])
        {

            $_SESSION['user']=$row['user'];
            $_SESSION['id'] = $row['id'];
            $_SESSION['clg'] = $row['clg'];
            $_SESSION['email'] = $row['email'];
            $_SESSION['remember'] = $_POST['remember'];
            setcookie('tcookie',$_POST['remember']);
            header("Location: index.php");
            exit;
        }
        else $err[]='Wrong username and/or password!';
    }

    if($err)
    $_SESSION['msg']['login-err'] = implode('<br />',$err);

    header("Location: signup.php");-->line 69
    exit;
}

3 个答案:

答案 0 :(得分:5)

您的mysql_query函数返回错误,而不是结果。尝试:

$res = mysql_query("SELECT id,user,email,clg FROM users WHERE user='{$_POST['username']}' AND pass='".md5($_POST['pass'])."'");
if ($res === false) {
    echo mysql_error();
    die;
}
$row = mysql_fetch_assoc($res);

这将帮助您获取错误信息。

一旦错误消失,您可能会发现'标题已发送错误'也消失了,这是因为某些内容已经打印到输出中(可能是错误消息)。


更新:对于“未选择数据库”错误,您需要在使用mysql_select_db($databasename);之前使用mysql_query()。否则,mysql不知道您要查询哪个数据库。

此外,您可能希望研究使用PDO,这是访问MySQL数据库的另一种方式,而且它更安全,更容易使用(IMO)。

答案 1 :(得分:1)

检查你是否正确执行了mysql_connect,并在执行mysql_query之前与MySQL服务器建立了有效的连接。 顺便说一下,Fabian Tamp对PDO是正确的。另外mysqli扩展比mysql更好。它更快更稳定。

答案 2 :(得分:0)

尝试删除第69行冒号后面的espace。