Проверьте, существует ли электронная почта в базе данных: PHP и MySQL
это функция, которую я использую
function emailExiste($email){
global $mysqli;
$stmt = $mysqli->prepare("SELECT id FROM usuarios WHERE correo = ? LIMIT 1");
$stmt->bind_param("s", $email);
$stmt->execute();
$stmt->store_result();
$num = $stmt->num_rows;
$stmt->close();
if ($num > 0){
return true;
} else {
return false;
}
}
но при запуске я получаю следующую ошибку:
Fatal error: Uncaught Error: Call to a member function bindparam() on bool in C:\xampp\htdocs\Mi-pagina\DBusuarios.php:62 Stack trace: #0 C:\xampp\htdocs\Mi-pagina\registrate.php(29): emailExiste('') #1 {main} thrown in C:\xampp\htdocs\Mi-pagina\DBusuarios.php on line 62
строка 62 является"bind_param ()"
Кто-нибудь может указать мне, как это решить? Я очень новичок в этом, это первое, что я делаю.
1 answers
Ошибка: Fatal error: Uncaught Error: Call to a member function bind_param() on bool ...
это указывает на то, что объект, на который вы хотите вызвать bind_param
, является логическим.
Что происходит в этом случае, так это то, что $stmt
является false
(логическое значение), а не объектом Prepared Statement, который должен быть.
И почему это false
? Ну, потому что что-то не удалось в коде. Таким образом, вы должны контролировать все, что может потерпеть неудачу, тем самым написав надежную программу, которая будет информировать вас во все времена ситуация.
Давайте перейдем к этому:
function emailExiste($email){
global $mysqli;
/*
*1. Controlamos que haya conexión
*/
if($mysqli) {
#Para este caso es mejor usar COUNT
$sql="SELECT COUNT(*) FROM usuarios WHERE correo = ? LIMIT 1";
/*
*2. Controlamos la preparación
*/
if( $stmt = $mysqli->prepare($sql) ) {
$stmt->bind_param("s", $email);
$stmt->execute();
#Se agrega el resultado de COUNT a $num
$stmt->bind_result($num);
$stmt->close();
#Se puede usar operador de comparación
$mData=array( 'msg'=>'success', 'status'=>($num > 0) );
} else {
$mData=array('msg'=>'Error preparando: '.$mysqli->error,'status'=>false);
}
} else {
$mData=array('msg'=>'Error de conexión','status'=>false);
}
return $mData;
}
В вызове метода вы можете сделать var_dump
или прочитать ключ msg
из него. Я использовал для этого случая array $mData
, где я помещаю в ключ ' msg ' возможное сообщение (особенно для ошибок) и в ключе 'status' логическое значение, которое вам может понадобиться. Это то, что я сделал ad libitum, но вы можете изменить по своему вкусу.
Если вы что-то не понимаете, вы можете сказать это в комментариях.