@dpripa

Почему не выводится запись с БД?

Что реализую:
Несколько таблиц пользователя в БД, в первой(users) хранятся основные данные для авторизации, в остальных(users_profiles_ua, users_profiles_ru, users_profiles_en) - данные имени, фамилии и т.д. для разных языков.

Конкретная задача:
При авторизации вытянуть данных с таблицы users_profiles_ru запись о пользователе с user_id равным id записи в таблице user.

Код:
$_SESSION['id']=$myrow['id'];
$_SESSION['email']=$myrow['email']; 

$language=$_SESSION['language'];
$user_id=$_SESSION['id'];

$result = mysql_query("SELECT * FROM users_profiles_$language WHERE user_id='$user_id'") || die(mysql_error());
$myrow2 = mysql_fetch_array($result);

$_SESSION['firstname']=$myrow2['firstname'];
$_SESSION['lastname']=$myrow2['lastname'];
$_SESSION['patronymic']=$myrow2['patronymic'];
$_SESSION['country']=$myrow2['country'];
$_SESSION['city']=$myrow2['city'];


Примечания:
Первый запрос к БД проходит удачно, данные с таблицы users: id и email записались в сессию.
Второй же запрос, представленный в фрагменте кода, возвращает пустое значение.
Переменная $_SESSION['language'] хранит значение "ru".
Выводил переменную $user_id , получал ожидаемый id пользователя, значит данные сюда доходят.

На выходе, в конечном итоге, получаю такую ошибку:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:\home\***\www\catalog\controllers\welcome\authorization.php on line 67
  • Вопрос задан
  • 2594 просмотра
Решения вопроса 1
@IceJOKER
Web/Android developer
Во-первых нахрен выбросьте mysql, переходите на mysqli или PDO.
Во-вторых научитесь работать с ошибками, php их не просто так выводит от нечего делать.
С примитивными знаниями английского можно сказать что в функцию mysql_fetch_array() был перед boolean тип вместо resource типа

в-третьих попробуйте так :
mysql_query("SELECT * FROM users_profiles_$language WHERE user_id='$user_id'") or die(mysql_error());


or и and имеют малый приоритет чем || и &&

И еще, опишу немножко подробно как бы я поступил на вашем месте.
Для начала прочел бы ошибку, которую выдает php, далее смело двинулся бы к строке, который выдал php (даже не зная английский можно додуматься), потом посмотрел бы правильно ли передаются значения переменных в запрос написав перед запросом die(var_dump($language, $user_id)); - так просто легче, не срабатывается весь код и все получаешь сразу же.
если данные передаются верно, то попробовал бы сделать запрос вручную , если получилось вручную значит дело не в запросе и не в переменных и это значит, что дело как раз таки в том, что идет после запрос "|| die...", попробовал бы убрать это. если получилось бы, то уже начал бы читать документацию почему с ним не работает код или просто уже более точно задал бы вопрос.
Научитесь работать с ошибками - это 90% времени разработки :D
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
А где инициализация соединения и почему оно не передается в mysql_query?

А вообще поддерживаю @IceJOKER, переходите на mysqli/PDO, ибо mysql* функции являются устаревшими и смысла их учить не особо много. Даже что бы разобраться.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
26 апр. 2024, в 10:43
1500 руб./за проект
26 апр. 2024, в 10:21
1200 руб./в час