проверить, существует ли строка с mysql

Мне нужна помощь, проверяющая, существует ли строка. Я получаю «письмо больше не существует publisher@example.com».

Есть ли лучший способ проверить, существует ли строка с mysqli?

if (count($_POST)) { $email = $dbl->real_escape_string(trim(strip_tags($_POST['email']))); $passwd = $dbl->real_escape_string(trim(strip_tags($_POST['passwd']))); $query = "SELECT `email` FROM `tblUser` WHERE `email` = '$email'"; $result = mysqli_query($dbl,$query); if(is_resource($result) && mysqli_num_rows($result) == 1 ){ $row = mysqli_fetch_assoc($result); echo $email . " email exists " . $row["email"] . "\n"; } else{ echo "email no longer exists" . $email . "\n"; } } 

Ниже приведены проверенные, проверенные и проверенные методы проверки наличия строки.

(Некоторые из них я использую сам или использовал в прошлом).

Edit: Я сделал предыдущую ошибку в моем синтаксисе, где я дважды использовал 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-инъекции.

NB:

При использовании форм и массивов POST, как указано выше, убедитесь, что массивы POST содержат значения, что метод POST используется для формы и сопоставляет именованные атрибуты для входов.

  • FYI: Формирует значение по умолчанию для метода GET, если не указано объяснение.

Примечание: <input type = "text" name = "var">$_POST['var'] . $_POST['Var'] нет совпадения.

  • Массивы POST чувствительны к регистру.

Consult:

Ошибка проверки ссылок:

Обратите внимание, что API MySQL не смешиваются, если вы можете посещать этот вопрос и вы используете mysql_ для подключения (и запросов с).

  • Вы должны использовать тот же самый из подключения к запросам.

Обратите внимание на следующее:

  • Можно ли смешивать API MySQL в PHP?

Если вы используете API mysql_ и не имеете mysql_ работать с ним, обратитесь к следующим вопросам и mysql_ на стек:

  • MySql php: проверьте, существует ли строка

Функции mysql_* устарели и будут удалены из будущих выпусков PHP.

  • Пришло время вступить в XXI век.

Вы также можете добавить ограничение UNIQUE в (a) строку (строки).

Рекомендации:

Вы должны выполнить свой запрос и добавить одиночную кавычку в $ email в запросе beacuse, это строка, и удалить is_resource($query) $ – это строка, результатом $ будет ресурс

 $query = "SELECT `email` FROM `tblUser` WHERE `email` = '$email'"; $result = mysqli_query($link,$query); //$link is the connection if(mysqli_num_rows($result) > 0 ){....} 

ОБНОВИТЬ

База в вашем правлении просто изменится:

 if(is_resource($query) && mysqli_num_rows($query) > 0 ){ $query = mysqli_fetch_assoc($query); echo $email . " email exists " . $query["email"] . "\n"; 

От

 if(is_resource($result) && mysqli_num_rows($result) == 1 ){ $row = mysqli_fetch_assoc($result); echo $email . " email exists " . $row["email"] . "\n"; 

и вы будете в порядке

ОБНОВЛЕНИЕ 2

Лучшим способом должно быть процедура Store, которая выполняет следующий SQL, передающий Email как параметр

 SELECT IF( EXISTS ( SELECT * FROM `Table` WHERE `email` = @Email) , 1, 0) as `Exist` 

и получить значение в php

Pseudocodigo:

  $query = Call MYSQL_SP($EMAIL); $result = mysqli_query($conn,$query); $row = mysqli_fetch_array($result) $exist = ($row['Exist']==1)? 'the email exist' : 'the email doesnt exist'; 

После проверки и перед INSERT проверьте, существует ли имя пользователя, используя mysqli (процедурный). Это работает:

 //check if username already exists include 'phpscript/connect.php'; //connect to your database $sql = "SELECT username FROM users WHERE username = '$username'"; $result = $conn->query($sql); if($result->num_rows > 0) { $usernameErr = "username already taken"; //takes'em back to form } else { // go on to INSERT new record