PHP&用于网站的MYSQL登录系统,坚持用户创建

时间:2012-11-18 23:48:14

标签: php mysql pdo

我正在尝试为我的网站编写用户登录系统。我正在我的笔记本电脑上运行WAMP并使用Aptana进行开发。我一直试图让用户创建功能工作大约3天。这个功能在这里:

function create_new_user($email, $pass, $level){
$db = new PDO('mysql:host=localhost;dbname=jadams', 'root', '');
$insertQuery = "INSERT INTO jadams.user VALUES ($email, $pass, $level);";
$db->query($insertQuery);
return TRUE;
}

我已经多次重写了这个函数,使用预处理语句和各种形式的条件检查,这是最简单的一个,希望能够搞清楚。无论我尝试什么,我都无法插入数据库工作。我通过phpMyAdmin强制插入用户来使用此登录功能:

function is_pass_correct($email, $pass){
$db = new PDO('mysql:host=localhost;dbname=jadams', 'root', '');
$email = $db->quote($email);
$selectQuery = "SELECT password FROM jadams.user WHERE email = $email;";
$rows = $db->query($selectQuery);
$db=NULL;
if($rows) {
    foreach ($rows as $row) {
        if($pass === $row["password"]) {return TRUE;}   //MD5
    }
}
return FALSE;
}

我的数据库的结构是电子邮件varchar(256)not null primary,password varchar(256)not null,access int;我也尝试过使用和不使用分号的查询。

2 个答案:

答案 0 :(得分:2)

您缺少要插入值的列名。

"INSERT INTO jadams.user (email, password, level) VALUES ($email, $pass, $level);"

此外,由于您正在使用PDO库,因此请考虑使用预准备语句来转义不受信任的数据。

$insertQuery = "INSERT INTO jadams.user (email, password, level) 
                VALUES (:email, :password, :level)";
$db = $conn->prepare($insertQuery);
$db->execute(array(':email'=>$email,
                   ':password'=>$pass,
                    ':level'=>$level));

答案 1 :(得分:0)

您收到错误了吗?

如果不知道完整的数据库结构,很难诊断,但乍一看,该表中的列可能与您提供的值不匹配。

从技术上讲,列名称不是必需的,但如果您不提供它们,则必须按顺序为每列提供适当的值。如果您没有设置userID或其他字段,则可能是问题所在。

From the manual

  

如果没有为INSERT ... VALUES或INSERT ... SELECT指定列名列表,则表中每列的值必须由VALUES列表或SELECT语句提供。

为了安全起见,我建议明确设置列名,如下所示:

INSERT INTO 
   jadams.user (email, password, level) 
VALUES ($email, $pass, $level)

我个人更喜欢INSERT INTO ... SET语法。它感觉更具可读性,并且不易混淆列。

INSERT INTO 
    jadams.user 
SET 
    email = $email, 
    password = $password 
    level = $level

当然,这不会进入parameter bindingpassword storage以及您还想要考虑的许多其他问题。

查询结尾处的分号也可能导致问题。我知道对于旧的mysql_ *函数,手册明确声明你应该在查询结尾处有分号。但是,在PDO中没有任何相关内容。我假设现在最后有一个分号,但我会尝试删除它,看看会发生什么。 (可能没什么)。