Následují vyzkoušené, testované a osvědčené metody, jak zkontrolovat, zda řádek existuje.
(Některé z nich používám sám nebo jsem je používal v minulosti).
Upravit: Udělal jsem předchozí chybu v syntaxi, kde jsem použil mysqli_query()
dvakrát. Přečtěte si prosím revize.
T.j.:
if (!mysqli_query($con,$query))
což by se mělo jednoduše číst jako if (!$query)
.
- Omlouvám se za přehlédnutí této chyby.
Poznámka: Oba '".$var."'
a '$var'
udělat to samé. Můžete použít kterýkoli z nich, oba jsou platnou syntaxí.
Zde jsou dva upravené dotazy:
$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
}
a ve vašem případě:
$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
}
Můžete také použít mysqli_
s připraveným výpisem
metoda:
$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;
}
}
}
Nebo metoda PDO s připraveným výpisem :
<?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.";
}
}
?>
- Připravené příkazy je nejlepší použít k ochraně před injekcí SQL.
Pozn.:
Při práci s formuláři a poli POST, jak je použito/nastíněno výše, se ujistěte, že pole POST obsahují hodnoty, že je pro formulář použita metoda POST a že vstupy odpovídají pojmenovaným atributům.
- Pro informaci:Formuláře jako výchozí používají metodu GET, pokud nejsou výslovně uvedeny.
Poznámka:<input type = "text" name = "var">
- $_POST['var']
zápas. $_POST['Var']
žádná shoda.
- Pole POST rozlišují velká a malá písmena.
Poraďte se:
Chyba při kontrole referencí:
- 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
Vezměte prosím na vědomí, že rozhraní MySQL API se nekombinují, pro případ, že navštěvujete tyto otázky a odpovědi a používáte mysql_
spojit se (a dotazovat se).
- Při připojování k dotazování musíte použít stejný.
Přečtěte si o tom následující:
Pokud používáte mysql_
API a nemáte jinou možnost s ním pracovat, pak si přečtěte následující otázky a odpovědi na Stack:
mysql_*
funkce jsou zastaralé a budou odstraněny z budoucích verzí PHP.
- Je čas vykročit do 21. století.
Do (a) řádků můžete také přidat omezení UNIQUE.
Reference:
- 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
- Jak zkontrolovat, zda hodnota již existuje, aby se předešlo duplicitám?
- Jak přidat jedinečný klíč do existující tabulky (s řádky, které nejsou jedinečné)