Poniżej przedstawiono wypróbowane, przetestowane i sprawdzone metody sprawdzania, czy wiersz istnieje.
(Niektóre z nich sam używam lub używałem w przeszłości).
Edytuj: Zrobiłem poprzedni błąd w mojej składni, gdzie użyłem mysqli_query()
dwa razy. Proszę zapoznać się z wersją(ami).
Czyli:
if (!mysqli_query($con,$query))
które powinno być po prostu odczytane jako if (!$query)
.
- Przepraszam za przeoczenie tego błędu.
Uwaga boczna: Oba '".$var."'
i '$var'
Zrobić to samo. Możesz użyć jednego z nich, obie mają prawidłową składnię.
Oto dwa edytowane zapytania:
$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
}
aw twoim przypadku:
$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
}
Możesz także użyć mysqli_
z przygotowanym oświadczeniem
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;
}
}
}
Lub metoda PDO z przygotowanym oświadczeniem :
<?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.";
}
}
?>
- Przygotowane instrukcje najlepiej służą do ochrony przed wstrzyknięciem SQL.
Uwaga:
Kiedy masz do czynienia z formularzami i tablicami POST, jak użyto/określono powyżej, upewnij się, że tablice POST zawierają wartości, że metoda POST jest używana dla formularza i dopasowuje nazwane atrybuty dla danych wejściowych.
- FYI:Formularze domyślnie korzystają z metody GET, jeśli nie zostało to wyraźnie poinstruowane.
Uwaga:<input type = "text" name = "var">
- $_POST['var']
dopasować. $_POST['Var']
nie pasuje.
- W tablicach POST rozróżniana jest wielkość liter.
Konsultacja:
Błąd sprawdzania referencji:
- http://php.net/manual/en/function. raportowanie-błędów.php
- http://php.net/manual/en/mysqli.error. php
- http://php.net/manual/en/pdo. obsługa błędów.php
Pamiętaj, że interfejsy API MySQL nie przeplatają się, na wypadek gdybyś odwiedzał to pytanie i używasz mysql_
do łączenia się (i wysyłania zapytań).
- Musisz użyć tego samego, od łączenia do wysyłania zapytań.
Zapoznaj się z następującymi informacjami na ten temat:
Jeśli używasz mysql_
API i nie masz wyboru, aby z nim pracować, a następnie zapoznaj się z następującymi pytaniami i odpowiedziami na stosie:
mysql_*
funkcje są przestarzałe i zostaną usunięte z przyszłych wydań PHP.
- Czas wkroczyć w XXI wiek.
Możesz również dodać ograniczenie UNIQUE do (a) wierszy.
Referencje:
- 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 sprawdzić, czy wartość już istnieje, aby uniknąć duplikatów?
- Jak dodać unikalny klucz do istniejącej tabeli (z wierszami nieunikatowymi)