好的,首先要做的事情。我试图根据此coding example建立网站。
此示例使用mysql查询而不是PDO查询,因此我尝试将登录(并最终注册)脚本更改为PDO。我有一个用示例用户名和密码编写的数据库来测试脚本。但是,我的查询总是返回false。我不确定我是否正确处理传递的变量。我知道我很好地连接到数据库。这是我的代码,它给了我一些问题。这会在页面检查后直接获取,以确保已成功输入用户名和密码。
if(!count($err))
{
$_POST['username'] = $con->quote($_POST['username']);
$_POST['password'] = $con->quote($_POST['password']);
$_POST['rememberMe'] = (int)$_POST['rememberMe'];
$username=$_POST['username'];
$password=md5($_POST['password']);
// Escaping all input data
//$loginquery = $con->prepare("SELECT id,usr FROM tz_members WHERE usr='{$_POST['username']}' AND pass='{".md5($_POST['password'])."'");
//$myquery = $con->query($loginquery);
$loginquery = $con->prepare("Select id,usr FROM tz_members WHERE usr=:username AND pass=:password");
$loginquery->execute(array(':username'=>$username, 'password'=>$password));
$row = $loginquery->fetchAll();
if($row['usr'])
{
// If everything is OK login
$_SESSION['usr']=$row['usr'];
$_SESSION['id'] = $row['id'];
$_SESSION['rememberMe'] = $_POST['rememberMe'];
// Store some data in the session
setcookie('tzRemember',$_POST['rememberMe']);
}
else $err[]='Wrong username and/or password!';
//else $err[]= print_r($row['usr']);
我注释掉了一些代码,以便我可以尝试不同的东西。我添加了最后一行,以便(希望)显示我的查询返回的内容。它返回的全部是" 1",这是我的测试用户名和密码所在的行的ID号。我不确定这是不是巧合。就是这样,我没有收到任何更多的错误。我只是收到"错误的用户名和/或密码!"信息。任何帮助将不胜感激!
答案 0 :(得分:0)
使用占位符时,您可以 NOT 引用/转义数据。数据库系统将为您解决这个问题。因为您已经手动向数据添加了转义,所以这些转义本身会被数据库作为查询系统的一部分进行转义,并且您不会插入与提供的内容不同的内容:
$loginquery->execute(array(':username'=>$_POST['username'], ':password'=> $_POST['password']));
确实是你需要做的。并注意密码参数上的:
。你的版本中缺少它。将占位符:值对传递给`exec()。
:
答案 1 :(得分:0)
fetchAll()不会返回您的想法。 始终阅读手册中的功能说明。然后选择更合适的方法。
答案 2 :(得分:-1)
$loginquery->execute(array(':username'=>$username, 'password'=>$password));
删除参数上的:!