Причина, по которой вы не видите никаких значений, извлеченных из базы данных, заключается в том, что вы забыли вызвать fetch()
после bind_result()
.
Однако вы слишком усложняете. Вам не нужно так много операторов if
, и вы не должны использовать bind_result()
, если у вас более одного столбца. Это становится очень запутанным. Используйте get_result()
для получения результатов, а затем выберите единственную строку, которая вам нужна (при условии, что адрес электронной почты уникален, а ваш SELECT возвращает 0 или 1 записи).
$stmt = $link->prepare("SELECT id, email, username FROM users WHERE email = ?");
$stmt->bind_param('s', $email);
$stmt->execute();
$result = $stmt->get_result()->fetch_assoc();
if ($result) {
$error = 0;
$to = $result['email'];
echo "id:".$result['id'];
echo $result['username'];
echo $result['email'];
} else {
$error = 1;
}
Нет необходимости в mysqli_stmt_num_rows
. Сами данные говорят вам, было что-то возвращено или нет. Это также защищает вас от аналогичной проблемы при использовании небуферизованных запросов. Легко случайно пропустить mysqli_stmt_store_result()
.
Никогда не проверяйте возвращаемое значение mysqli_stmt_execute()
или mysqli_prepare()
. Это ужасная и грязная практика. Убедитесь, что у вас включен отчет об ошибках. См. Как получить сообщение об ошибке в MySQLi?