我知道这已经被问了很多,而且我已经搜索过并且真的尝试了所有这些。我真的很接近,但无法让它发挥作用。
我试图检查用户名或用户邮件是否已被使用并相应地显示错误。
<?php
if (isset($_POST['register'])) {
try
{
$checkValidity = $connect->prepare('SELECT username, usermail FROM users WHERE username = :username OR usermail = :usermail');
$checkValidity->bindValue(':username', $username);
$checkValidity->bindValue(':usermail', $usermail);
$checkValidity->execute();
$row = $checkValidity->fetchColumn();
if ($row == $username) {
$errName = 'This username is already taken.';
}
if ($row == $usermail) {
$errMail = 'Email already in use.';
}
}
catch(PDOException $e)
{
// print $e->getMessage();
}
}
?>
它适用于用户名,但对于我的生活,我无法收到电子邮件错误...
我尝试单独的SELECT查询(用户名/用户邮件),如果用户名错误显示,则仅显示电子邮件错误。
电子邮件错误永远不会单独显示。
我花了太多时间试图让它发挥作用,我慢慢失去理智。
任何迹象都会非常赞赏......!
谢谢...
答案 0 :(得分:2)
FetchColumn返回第一列值。你需要使用fetch。喜欢
$row = $checkValidity->fetch();
if ($row['username'] == $username) {
$errName = 'This username is already taken.';
}
if ($row['usermail'] == $usermail) {
$errMail = 'Email already in use.';
}
答案 1 :(得分:0)
如果使用PDOStatement :: fetchColumn()来检索数据,则无法从同一行返回另一列。
您的提取用户名只需要使用fetch()来获取整行并进行比较
$row = $checkValidity->fetch();
if ($row['username'] == $username) {
$errName = 'This username is already taken.';
}
if ($row['useremail'] == $useremail) {
$errMail = 'Email already in use.';
}