поля таблицы mysql — идентификатор ресурса # 6

#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, ознакомьтесь с параметризованными запросами и хранимыми процедурами. Оба они являются отличными инструментами для обеспечения безопасности ваших запросов.