#php
#php
Вопрос:
У меня есть база данных (db_name = members) с большим количеством полей, но релевантными для этого являются:
security_question, security_answer, email
php-код является:
$email = $_COOKIE['site_user'];
$select_sa = mysql_query("SELECT security_answer FROM members WHERE email='".$email."'");
$result_sa = mysql_query($select_sa);
$arr_sa = mysql_fetch_row($result_sa);
$result2 = $arr_sa[0];
$get_sa = $result2;
Если я
echo $select_sa;
Выводится «Идентификатор ресурса # 6», хотя в таблице я вижу ответ безопасности в виде слова, а не «Идентификатор ресурса # 6».
Если я
echo $get_sa;
Он ничего не печатает.
Не могли бы вы, пожалуйста, помочь мне прочитать поле securty_answer из базы данных?
Спасибо, Рэй
Ответ №1:
Вы выполняете запрос дважды, вводя дескриптор результата с первого раза в текстовый параметр запроса второго. Это неверно. Попробуйте это вместо:
$select_sa = "SELECT security_answer FROM members WHERE email='".$email."'";
$result_sa = mysql_query($select_sa);
$arr_sa = mysql_fetch_row($result_sa);
$result2 = $arr_sa[0];
$get_sa = $result2;
Пожалуйста, также убедитесь, что $email
поле передается через mysql_real_escape_string()
перед использованием в запросе. Все данные, полученные от пользователя, например, через $_GET
, $_POST
или $_COOKIE
, должны быть экранированы должным образом. Если вы не избежите этого, вы будете открыты для атак с использованием SQL-инъекций.
Комментарии:
1. Большое вам спасибо. Теперь проблема решена, и да, я планирую потратить еще немного времени на безопасность. Приветствия 🙂
2. Рад, что это помогло. Если вы хотите прочитать о безопасности без внедрения SQL, ознакомьтесь с параметризованными запросами и хранимыми процедурами. Оба они являются отличными инструментами для обеспечения безопасности ваших запросов.