@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
  • Вопрос задан
  • 2595 просмотров
Решения вопроса 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* функции являются устаревшими и смысла их учить не особо много. Даже что бы разобраться.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы