#php #mysql #mysqli
#php #mysql #mysqli
Вопрос:
Я использую PHP и MySQL (mysqli) в XAMPP, у меня есть выпадающий список, и пользователь должен выбрать его, затем используется запрос для поиска идентификатора выбранного значения, но он не работает. Я уже делал это еще три раза, и это сработало, но этот не работает.
$sql = "SELECT foo_id FROM foo_table
WHERE foo_name = 'bar';";
$res = $conn->query($sql);
for ($i = 0; $i < 500; $i ) {
$row = $res->fetch_assoc();
echo $row[row["foo_id"]]
}
Проблема в том, что fetch_assoc ничего не возвращает, даже если переменная $res возвращает true .
Редактировать: я забыл упомянуть, что выполнение запроса в phpmyadmin возвращает результаты в обычном режиме.
Комментарии:
1. Почему вы делаете (неправильный) двойной индекс
$row[row["foo_id"]]
? Это даже выдает вам предупреждения (которые являются скрытыми ошибками). Проверьте свои журналы и сделайте так, чтобы ваш код выполнялся без ошибок, предупреждений или уведомлений.2. То, что
SELECT
запрос был выполнен успешно, не означает, что в результирующем наборе есть какие-либо данные. Вы можете проверить сnum_rows
помощью поля, насколько велик результирующий набор.3. @Progman, если я запускаю запрос в phpmyadmin, есть один результат, но когда я делаю это в приведенном выше коде, его нет.
Ответ №1:
Я не уверен, почему вы повторяете более 500 раз? это не имеет смысла.
Наилучшая практика для извлечения данных из базы данных —
$sql = "SELECT foo_id FROM foo_table
WHERE foo_name = 'bar'";
$res = $conn->query($sql);
if ($res->num_rows > 0) {
// output data of each row
while($row = $res->fetch_assoc()) {
echo $row["foo_id"];
}
}
или
$foo_id = ''
if ($res->num_rows > 0) {
// output data of each row
while($row = $res->fetch_assoc()) {
$foo_id = $row["foo_id"];
}
}
for ($i = 0; $i < 500; $i ) {
echo $foo_id;
}
Комментарии:
1. это был исходный код, 500 итераций — результат того, что я пытался решить проблему (по неправильному пути (очевидно))
2. Кроме того, я только что заметил, что в вашем примере кода есть $res и $result, я думаю, вы забыли изменить имя одной из переменных, возможно, вы захотите это отредактировать
Ответ №2:
Я нашел решение, проблема в том, что реальная база данных использовала греческие символы в записях, и для базы данных нужно было установить utf8-bin, после этого это сработало.