Изменить: я новый пользователь, поэтому я не могу ответить на свой вопрос в течение 24 часов.Итак, я разместил ответ здесь.
Спасибо всем, кто быстро ответил.
Если кто-то столкнется с подобными проблемами, действительно поможет, есливы запускаете fetch () для своего объекта mysqli_stmt.
В моем коде выше решение выглядит следующим образом:
$query->bind_result($col1) or die ("Could not bind result");
$query->fetch(); // <--- How could I forget to do this?
if ($col1 !== 0) {
return true;
} else {
return false;
}
Исходный вопрос:
Привет всем,
Как часть веб-приложения PHP, я запрашиваю базу данных MySQL, используя mysqli и подготовленные операторы.
Я использовал точно такой же код нанесколько запросов, и это работает, но по одному конкретному запросу он всегда возвращает пустой набор записей.Я выполнил точно такой же запрос из командной строки MySQL, и он правильно возвращает результат.Я проверил передаваемые параметры, и они в порядке.
Я провел большую часть дня, пытаясь выяснить, почему я всегда получаю пустой набор записей без ошибок илипредупреждения.У меня есть ошибки PHP для отображения на странице, и я установил для них E_ALL | E_STRICT.Я до сих пор не получаю никаких предупреждений или ошибок.
Я перепробовал все очевидные вещи, такие как проверка того, что я действительно могу подключиться к базе данных, проверка параметров, которые передаются, и проверкастрока, которую я пытаюсь вернуть, действительно существует в базе данных.У меня были var_dump () s и die () по всей странице, чтобы проверить, что возвращается, и это всегда законный, но пустой набор записей.
function salt() {
return("I've removed my salt from this sample code");
}
function openDatabase() {
$conn = new mysqli("127.0.0.1", "username", "password", "database")
or die("Error: Could not connect to database.");
return($conn);
}
function checkUserCredentials($username, $password) {
$goodPassword = md5(salt().$username.$password);
$conn = openDatabase();
$query = $conn->stmt_init();
$query->prepare("SELECT id FROM users WHERE email = ? AND passwordHash = ?")
or die('Problem with query');
$query->bind_param("ss", $username, $goodPassword)
or die('Error binding parameters');
$query->execute() or die("Could not execute");
$query->bind_result($col1) or die ("Could not bind result");
if ($col1 !== 0) {
die("Authentication Complete");
} else {
die("Authentication Failure! Number of Rows: ".$query->num_rows." Username: " . $username . " Password Hash: " . $goodPassword);
}
}
Любая обратная связь приветствуется.Я уверен, что упускаю что-то простое, но если бы я не побрился, я бы сейчас вырвал себе волосы.
Спасибо