Te traemos la contestación a este atascamiento, o por lo menos eso pensamos. Si tienes inquietudes puedes dejar un comentario, para nosotros será un gusto ayudarte
Solución:
Los siguientes son métodos probados, probados y comprobados para verificar si existe una fila.
(Algunos de los cuales yo mismo uso o he usado en el pasado).
Editar: Cometí un error anterior en mi sintaxis donde usé mysqli_query()
dos veces. Consulte la (s) revisión (es).
Es decir:
if (!mysqli_query($con,$query))
que debería haber leído simplemente como if (!$query)
.
- Pido disculpas por pasar por alto ese error.
Nota al margen: Ambos '".$var."'
y '$var'
hacer la misma cosa. Puede utilizar cualquiera de los dos, ambos son de sintaxis válida.
Aquí están las dos consultas editadas:
$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
y en tu 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
También puedes usar mysqli_
con un método de declaración preparado:
$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 método DOP con una declaración preparada:
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.";
?>
- Es mejor utilizar declaraciones preparadas para ayudar a proteger contra una inyección de SQL.
NÓTESE BIEN:
Cuando se trata de formularios y matrices POST como se usa / descrito anteriormente, asegúrese de que las matrices POST contengan valores, que se use un método POST para el formulario y que coincida con el nombre attributes para las entradas.
- Para su información: los formularios se establecen de forma predeterminada en un método GET si no se instruyen explícitamente.
Nota: –
$_POST['var']
coincidir. $_POST['Var']
Sin coincidencia.
- Las matrices POST distinguen entre mayúsculas y minúsculas.
Consultar:
- http://php.net/manual/en/tutorial.forms.php
Error al comprobar las referencias:
- 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
Tenga en cuenta que las API de MySQL no se mezclan, en caso de que esté visitando estas preguntas y respuestas y esté utilizando mysql_
para conectarse (y realizar consultas).
- Debe utilizar el mismo desde la conexión hasta la consulta.
Consulte lo siguiente sobre esto:
- ¿Puedo mezclar las API de MySQL en PHP?
Si está utilizando el mysql_
API y no tiene otra opción para trabajar con ella, luego consulte las siguientes preguntas y respuestas en Stack:
- MySql php: compruebe si existe Row
El mysql_*
Las funciones están obsoletas y se eliminarán de futuras versiones de PHP.
- Es hora de entrar en el siglo XXI.
También puede agregar una restricción ÚNICA a (una) fila (s).
Referencias:
- 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
- ¿Cómo comprobar si ya existe un valor para evitar duplicados?
- Cómo agregar único key a la tabla existente (con filas no únicas)
Debe ejecutar su consulta y agregar comillas simples a $ email en la consulta porque es un stringy quitar el is_resource($query)
$ consulta es una string, el $ resultado será el recurso
$query = "SELECT `email` FROM `tblUser` WHERE `email` = '$email'";
$result = mysqli_query($link,$query); //$link is the connection
if(mysqli_num_rows($result) > 0 )....
ACTUALIZAR
Base en su edición simplemente cambie:
if(is_resource($query) && mysqli_num_rows($query) > 0 ){
$query = mysqli_fetch_assoc($query);
echo $email . " email exists " . $query["email"] . "n";
Por
if(is_resource($result) && mysqli_num_rows($result) == 1 ){
$row = mysqli_fetch_assoc($result);
echo $email . " email exists " . $row["email"] . "n";
y estarás bien
ACTUALIZACIÓN 2
Una mejor manera debería ser tener un procedimiento de almacenamiento que ejecute el siguiente SQL pasando el correo electrónico como parámetro
SELECT IF( EXISTS (
SELECT *
FROM `Table`
WHERE `email` = @Email)
, 1, 0) as `Exist`
y recuperar el valor en 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';
Después de la validación y antes de INSERT, verifique si el nombre de usuario ya existe, usando mysqli (procedural). Esto funciona:
//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
Si te ha resultado provechoso este post, sería de mucha ayuda si lo compartieras con el resto desarrolladores y nos ayudes a dar difusión a nuestra información.