Следните са изпитани, тествани и доказани методи за проверка дали съществува ред.
(Някои от които използвам сам или съм използвал в миналото).
Редактиране: Направих предишна грешка в синтаксиса си, където използвах mysqli_query()
два пъти. Моля, консултирайте се с ревизията(ите).
Т.е.:
if (!mysqli_query($con,$query))
който трябваше просто да се прочете като if (!$query)
.
- Извинявам се, че пропуснах тази грешка.
Странична бележка: И двете '".$var."'
и '$var'
направи същото. Можете да използвате всеки един, и двата са валиден синтаксис.
Ето двете редактирани заявки:
$query = mysqli_query($con, "SELECT * FROM emails WHERE email='".$email."'");
if (!$query)
{
die('Error: ' . mysqli_error($con));
}
if(mysqli_num_rows($query) > 0){
echo "email already exists";
}else{
// do something
}
и във вашия случай:
$query = mysqli_query($dbl, "SELECT * FROM `tblUser` WHERE email='".$email."'");
if (!$query)
{
die('Error: ' . mysqli_error($dbl));
}
if(mysqli_num_rows($query) > 0){
echo "email already exists";
}else{
// do something
}
Можете също да използвате mysqli_
с изготвено изявление
метод:
$query = "SELECT `email` FROM `tblUser` WHERE email=?";
if ($stmt = $dbl->prepare($query)){
$stmt->bind_param("s", $email);
if($stmt->execute()){
$stmt->store_result();
$email_check= "";
$stmt->bind_result($email_check);
$stmt->fetch();
if ($stmt->num_rows == 1){
echo "That Email already exists.";
exit;
}
}
}
Или метод на PDO с изготвено изявление :
<?php
$email = $_POST['email'];
$mysql_hostname = 'xxx';
$mysql_username = 'xxx';
$mysql_password = 'xxx';
$mysql_dbname = 'xxx';
try {
$conn= new PDO("mysql:host=$mysql_hostname;dbname=$mysql_dbname", $mysql_username, $mysql_password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
exit( $e->getMessage() );
}
// assuming a named submit button
if(isset($_POST['submit']))
{
try {
$stmt = $conn->prepare('SELECT `email` FROM `tblUser` WHERE email = ?');
$stmt->bindParam(1, $_POST['email']);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
}
}
catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
if($stmt->rowCount() > 0){
echo "The record exists!";
} else {
echo "The record is non-existant.";
}
}
?>
- Подготвените оператори е най-добре да се използват за защита срещу SQL инжекция.
N.B.:
Когато работите с формуляри и POST масиви, както са използвани/очертани по-горе, уверете се, че POST масивите съдържат стойности, че се използва POST метод за формуляра и съответства на именувани атрибути за входовете.
- FYI:Формулярите по подразбиране са с GET метод, ако не е указано изрично.
Забележка:<input type = "text" name = "var">
- $_POST['var']
съвпада. $_POST['Var']
няма съвпадение.
- POST масивите са чувствителни към главни букви.
Консултирайте се:
Грешка при проверката на препратките:
- http://php.net/manual/en/function. error-reporting.php
- http://php.net/manual/en/mysqli.error. php
- http://php.net/manual/en/pdo. error-handling.php
Моля, имайте предвид, че MySQL API не се смесват, в случай че може да посещавате тези въпроси и отговори и използвате mysql_
за свързване с (и запитване).
- Трябва да използвате същия от свързването към заявката.
Консултирайте се със следното за това:
Ако използвате mysql_
API и нямате избор да работите с него, след това се консултирайте със следните въпроси и отговори в стека:
mysql_*
функциите са отхвърлени и ще бъдат премахнати от бъдещи версии на PHP.
- Време е да влезем в 21-ви век.
Можете също да добавите УНИКАЛНО ограничение към (а) ред(ове).
Препратки:
- http://dev.mysql. com/doc/refman/5.7/en/constraint-primary-key.html
- http://dev.mysql.com/ doc/refman/5.7/en/alter-table.html
- Как да проверите дали дадена стойност вече съществува, за да избегнете дублиране?
- Как да добавите уникален ключ към съществуваща таблица (с редове, които не са уникални)