Как именно работает mysqli (a, b, c, d) -> query (sql) -> fetch_asso c ()? - PullRequest
0 голосов
/ 07 февраля 2020

Я новичок в php и mysqli и проходил через и пытался понять, как работает множество этих встроенных функций. Я прочитал документацию и много уроков / примеров.

У меня есть что-то вроде:

$conn = new mysqli(vars); <br />
$sql = "Select * from Users where name ='$name'";

$result = $conn->query($sql);
$pass = result->fetch_assoc()['Pass'];
//check password stuff

, которое работает нормально, однако, если я тогда попытаюсь использовать $result->fetch_assoc()['ID'], оно возвращает ноль. Если я поменяю местами порядок ID и Pass, тогда id вернется, а pass вернется к нулю.

Я не понимаю, почему это так. Что я думаю (что явно неправильно), так это то, что результат должен хранить всю строку (что он и делает), а затем, когда я получаю ассо c, мне просто нужно извлечь данные из строки. Однако, кажется, это перезаписывает результат, когда я получаю ассо c. Что с этим?

Моя работа заключается в том, чтобы вызывать запрос несколько раз для каждой точки данных, которая мне нужна, чтобы начать сеанс и хранить переменные, и я знаю, что могу использовать подготовленные операторы, но я чувствую, что есть лучший путь, и я скучаю по нему.

Может кто-нибудь объяснить, пожалуйста?

1 Ответ

3 голосов
/ 07 февраля 2020

Каждый раз, когда вы звоните fetch_assoc(), он выбирает следующий ряд. Предположительно будет только один пользователь с указанным именем c, поэтому результатом второго вызова fetch_assoc() будет null.

Сохраните значение $result->fetch_assoc(), и вы можете делать то, что Вы хотите с этим потом.

$user = $result->fetch_assoc();

echo $user['ID'];
echo $user['Pass'];
...