Bat*_*Man 3 php mysql pdo bindvalue
我正在尝试建立一个注册/登录系统.要检查是否未使用用户名和电子邮件地址,我使用此:
$username = $_POST['uLogin'];
$usernameLC = strtolower($username);
$query1 = $db0->query("SELECT userLogin FROM tbuser WHERE userLogin=':login';");
$query1->bindValue(":login", $usernameLC, PDO::PARAM_STR);
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我可以使用相同的用户名创建尽可能多的用户.通过扩展,它也不会让我连接到网站,因为它没有绑定值或任何东西,所以它无法将我的用户名与数据库中的用户名进行比较.
当我像这样使用它时,验证用户名是否有效
$username = $_POST['uLogin'];
$usernameLC = strtolower($username);
$query1 = $db0->query("SELECT userLogin FROM tbuser WHERE userLogin='$usernameLC';");
Run Code Online (Sandbox Code Playgroud)
但这不是正确的方法:/
有人可以帮忙吗?:)
他们没有工作,因为你的绑定值包含引号; 删除它们.
userLogin=':login'
Run Code Online (Sandbox Code Playgroud)
如
userLogin=:login
Run Code Online (Sandbox Code Playgroud)
"当我像这样使用用户名时,验证用户名是否有效"
WHERE userLogin='$usernameLC'
Run Code Online (Sandbox Code Playgroud)
使用setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)会发出语法错误信号.
阅读如何在PDO中使用预准备语句,准备和执行:
洞察力:
确保您确实使用的是PDO连接而不是mysqli基于连接(未知).我经常看到这些类型的问题,其中OP mysqli_用于连接和查询PDO.
那些不同的MySQL API不会相互混合.
如果您正在使用以下内容mysqli_:
将错误报告添加到文件的顶部,这将有助于查找有关POST阵列的错误(如果有)或其他可能的错误.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
Run Code Online (Sandbox Code Playgroud)
旁注:错误报告应该只在暂存中完成,而不是生产.
编辑:
"谢谢,它工作得很好.但是登录时,将提交的密码与DB中的密码进行比较会返回false.我尝试在$ _SESSION ['test']中存储收到的密码以查看它获得的内容和print_r($ _ SESSION);返回我这个:数组([test] =>数组([userPwd] => test12 [0] => test12))(test12是我的密码,userPwd是数据库中的密码字段)任何想法?^^"
关于您使用密码留下的评论.
您似乎以纯文本形式存储密码,而不是哈希.这是非常沮丧的,并且存储在会话中; 一个非常糟糕的主意.
在散列密码的堆栈上查看此问答:
使用PHP的password_hash()功能和password_verify()功能.
对于PHP <5.5使用password_hash() compatibility pack.
存储散列密码时有关列类型和长度的说明.
VARCHAR.VARCHAR(255)是最好的.首先,如果您要准备,使用->prepare()和删除命名占位符中的引号,则不需要:
$query1 = $db0->prepare("SELECT userLogin FROM tbuser WHERE userLogin= :login");
Run Code Online (Sandbox Code Playgroud)
然后$query1->execute(),绑定后准备好的语句,总而言之:
$username = $_POST['uLogin'];
$usernameLC = strtolower($username);
$query1 = $db0->prepare('SELECT userLogin FROM tbuser WHERE userLogin = :login'); // prepare
$query1->bindValue(':login', $usernameLC, PDO::PARAM_STR); // bind
$query1->execute(); // execute
Run Code Online (Sandbox Code Playgroud)