$sql = $conn -> prepare("SELECT username, email FROM users WHERE username=? OR email = ?");
$sql -> bind_param('ss',$uname,$email);
$sql -> execute();
$result = $sql -> get_result();
$row=$result -> fetch_array(MYSQLI_ASSOC);
if ($row['username'] == $uname) {
echo "Username not availabe try different";
}
elseif ($row['email']==$email) {
echo "email is already taken diiferent";
}
else {
$stmt = $conn -> prepare("INSERT INTO users (username, email, pass, created) VALUES (?, ?, ?, ?)");
$stmt -> bind_param('ssss', $username, $email, $pass, $created);
if ($stmt->execute()) {
echo "Registrated sucessfully. Login Now!";
}
else {
echo "Something went wrong. Please try again";
}
}
Этот код не работает. Не знаю почему?
Если я выбираю одну строку, то она работает, но для нескольких она не работает.
Здесь я хочу проверить, есть ли уже имя пользователя и адрес электронной почты в БД или нет, используя подготовленные операторы.
Пожалуйста помоги.
Наконец, после 3-4 часов упражнений я решаю эту проблему с помощью статьи о переполнении стека:призыв к неопределенным-метод-MySQLi-stmtget-результат
Если у кого-то есть такая же проблема из-за родного драйвера, обратитесь к этой статье.
Это решение, которое работает для меня, дано ниже: сначала определите эту функцию
function fetchAssocStatement($stmt)
{
if($stmt->num_rows>0)
{
$result = array();
$md = $stmt->result_metadata();
$params = array();
while($field = $md->fetch_field()) {
$params[] = &$result[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $params);
if($stmt->fetch())
return $result;
}
return null;
}
как вы можете видеть, он создает массив и извлекает его с данными строки, так как он использует $stmt->fetch()
внутренне, вы можете назвать это так же, как вы бы позвонили mysqli_result::fetch_assoc
(просто убедитесь, что объект $ stmt открыт и результат сохранен). Теперь вызовите вышеуказанную функцию:
//mysqliConnection is your mysqli connection object
if($stmt = $mysqli_connection->prepare($query))
{
$stmt->execute();
$stmt->store_result();
while($assoc_array = fetchAssocStatement($stmt))
{
//do your magic
}
$stmt->close();
}
ХОРОШО. я пытался:
Mysqli
$sql = $conn -> prepare("SELECT * FROM users WHERE username=? OR email = ?");
$sql -> bind_param('ss',$uname, $email);
$sql -> execute();
$result = $sql -> get_result();
$row=$result -> fetch_array(MYSQLI_ASSOC);
PDO
$sql = $conn -> prepare("SELECT username, email FROM users WHERE username= :uname OR email = :email");
$sql -> bindParam(':uname', $uname);
$sql -> bindParam(':email', $email);
$sql -> execute();
$row=$sql -> fetchAll();
print_r($row);
отлично работает для меня Вы получаете 500 Ошибка, так что проверьте ваш подготовить заявление. Я думаю, что есть ошибка, которая приводит к 500.