All
Я пытаюсь написать функцию, которая проверила бы в моей таблице users
, существует ли уже имя пользователя или адрес электронной почты пользователя. Это будет использоваться в качестве проверки при регистрации пользователя.
Я хочу использовать ту же функцию, чтобы проверить, существует ли электронная почта или имя. Я бы использовал функцию, отправив ей 2 строковые переменные: $ tableColName, представляющий столбец в таблице db (так что либо «userName» или «userEmail», и $ userIdentifier, представляющий либо имя пользователя, либо электронную почту пользователя. хочу запросить.
Я написал следующее (изменено, чтобы быть свободно стоящим):
<?php
$dbHost="localhost";
$dbName="project";
$dbUser="admin";
$dbPassword="abcd";
$dbh=new PDO("mysql:host=$dbHost;dbname=$dbName", $dbUser, $dbPassword);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$userIdentifier="apple"; // Or "apple@gmail.com", which is an email
$tableColName="userName"; // Or "userEmail"
$sth=$dbh->prepare("SELECT * FROM users WHERE :tableColName = :userIdentifier");
$sth->bindParam(":tableColName", $tableColName);
$sth->bindParam(":userIdentifier", $userIdentifier);
$sth->execute();
print("PDO::FETCH_ASSOC: ");
print("Return next row as an array indexed by column name");
echo "</br>";
$result = $sth->fetch(PDO::FETCH_ASSOC);
print_r($result);
echo "</br>";
if ($result==null){
print("FALSE - result is null");
}else{
print("TRUE - result isn't null");
}
?>
Это не работает. Что работает, так это запрос, в котором я указываю имя столбца непосредственно в запросе вместо использования параметра, но я теряю гибкость, которую искал:
<?php
$dbHost="localhost";
$dbName="project";
$dbUser="admin";
$dbPassword="abcd";
$dbh=new PDO("mysql:host=$dbHost;dbname=$dbName", $dbUser, $dbPassword);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$userName="apple";
$sth=$dbh->prepare("SELECT * FROM users WHERE userName = :userIdentifier"); // Cannot be used for userEmail search.
$sth->bindParam(":userIdentifier", $userName);
$sth->execute();
print("PDO::FETCH_ASSOC: ");
print("Return next row as an array indexed by column name");
echo "</br>";
$result = $sth->fetch(PDO::FETCH_ASSOC);
print_r($result);
echo "</br>";
if ($result==null){
print("FALSE - result is null");
}else{
print("TRUE - result isn't null");
}
?>
Что я делаю не так?
Спасибо
JDelage