I seguenti sono metodi provati, testati e provati per verificare se esiste una riga.
(Alcuni dei quali li uso io stesso, o li ho usati in passato).
Modifica: Ho commesso un errore precedente nella mia sintassi in cui ho usato mysqli_query()
due volte. Si prega di consultare le revisioni.
Cioè:
if (!mysqli_query($con,$query))
che dovrebbe essere letto semplicemente come if (!$query)
.
- Mi scuso per aver trascurato l'errore.
Nota a margine: Entrambi '".$var."'
e '$var'
fare la stessa cosa. Puoi usarne uno qualsiasi, entrambi sono sintassi validi.
Ecco le due query modificate:
$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
}
e nel tuo caso:
$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
}
Puoi anche utilizzare mysqli_
con una dichiarazione preparata
metodo:
$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;
}
}
}
O un metodo PDO con una dichiarazione preparata :
<?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.";
}
}
?>
- Le istruzioni preparate sono utili per proteggere da un'iniezione SQL.
NB:
Quando hai a che fare con i moduli e gli array POST come usato/descritto sopra, assicurati che gli array POST contengano valori, che venga utilizzato un metodo POST per il modulo e che corrisponda agli attributi denominati per gli input.
- Cordiali saluti:per impostazione predefinita, i moduli utilizzano un metodo GET se non espressamente indicato.
Nota:<input type = "text" name = "var">
- $_POST['var']
partita. $_POST['Var']
nessuna corrispondenza.
- Gli array POST fanno distinzione tra maiuscole e minuscole.
Consulta:
Errore durante il controllo dei riferimenti:
- 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
Tieni presente che le API MySQL non si mescolano, nel caso tu stia visitando queste domande e risposte e stai utilizzando mysql_
con cui connettersi (e interrogare).
- Devi utilizzare lo stesso dalla connessione alla query.
Consultare quanto segue a riguardo:
Se stai usando mysql_
API e non hai scelta per lavorarci, quindi consulta le seguenti domande e risposte su Stack:
Il mysql_*
le funzioni sono deprecate e verranno rimosse dalle future versioni di PHP.
- È ora di entrare nel 21° secolo.
Puoi anche aggiungere un vincolo UNIQUE a (a) righe.
Riferimenti:
- 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
- Come verificare se esiste già un valore per evitare duplicati?
- Come aggiungere una chiave univoca alla tabella esistente (con righe non univoche)