2014-02-04 3 views
0

У меня есть этот массив и получить его из URL-адреса. этот массив является идентификатором члена, который мне нужно передать в mysql.PHP: как вставить значение массива в оператор mysql

$member_id = $_GET['member_id']; 

массив так: Array ([0] => 1269 [1] => 385)

как я могу перевод этот массив в моей MySQL заявление и сделать, стать AND:

$answer_sql = mysql_query("SELECT tna_category. * , tna_question. *, tna_answer. * 
         FROM tna_category, tna_question, tna_answer 
         WHERE tna_category.section_id = '$section_id1' 
         AND tna_question.id = tna_answer.question_id AND tna_question.category_id = tna_category.id 
         AND tna_answer.member_id = ['1269' , '385'] 
         ORDER BY tna_answer.question_id"); 

я должен поставить скобку ..

?

в этой части: tna_answer.member_id = Array или $ member_id

+0

получить значение массива foreach и передать запрос в foreach –

+0

[Почему я не должен использовать функции mysql_ * в PHP?] (Http://stackoverflow.com/questions/12859942/why-shouldnt-i-use -mysql-functions-in-php) – Phil

+0

как я могу сделать foreach в Mysql. извините, вы можете научить меня больше. – airi

ответ

-1

вы можете использовать IN пункт из MySQL, как это

$your_array = array("0"=>"1269", "1"=>"385"); 


$in_text = implode(",", $your_array); 

    $sql = "SELECT tna_category. * , tna_question. *, tna_answer. * 
     FROM tna_category, tna_question, tna_answer 
     WHERE tna_category.section_id = '$section_id1' 
       AND tna_question.id = tna_answer.question_id 
       AND tna_question.category_id = tna_category.id 
       AND tna_answer.member_id IN ($in_text) 
       ORDER BY tna_answer.question_id"; 
+0

Пожалуйста, изучите этот урок: http://xkcd.com/327/ – Okonomiyaki3000

+0

well .. это оффлайн сайт не онлайн, и он используется только одним администратором .. cheers :) – airi

1

Сначала разделите значение массива, не получив. строк в значении массива и передавать значение один за другим в запрос с помощью цикла for или foreach.

1

попробовать этот

$member_id = $_GET['member_id']; 

Если вы уже получаете запятую seprated значения, то нет никакой необходимости использовать функцию explode просто использовать implode функции в запросе к базе данных.

$member_id = explode(",", $member_id); 

, а затем

answer_sql = mysql_query("SELECT tna_category. * , tna_question. *, tna_answer. * 
         FROM tna_category, tna_question, tna_answer 
         WHERE tna_category.section_id = '$section_id1' 
         AND tna_question.id = tna_answer.question_id AND tna_question.category_id = tna_category.id 
         AND tna_answer.member_id IN (".implode(",", $member_id).") 
         ORDER BY tna_answer.question_id"); 

функция explode создания массива зависит от вас explode значение с запятой или пробелом, а затем лопаются значит соединить эти значения с запятой или пробелом. подробнее explode и implode.

+0

Учитывая, что массив 'member_id' поступает с внешнего входа, это очень опасно – Phil

+0

Есть ли другой способ ??? – user2727841

+0

PDO или MySQLi, подготовленные операторы и привязка параметров. Это действительно ** только ** безопасный способ – Phil

2

Как уже говорили другие, вы можете использовать IN(), но вы, очевидно, открыты для атак внедрения SQL, как это. Вы должны сделать это:

$escaped_ids = array_map('mysql_real_escape_string', $member_ids); 

Или, если они, конечно, все целые

$escaped_ids = array_map('intval', $member_ids); 

Затем вы можете написать запрос, как: не

$query = "SELECT tna_category. * , tna_question. *, tna_answer. * 
      FROM tna_category, tna_question, tna_answer 
      WHERE tna_category.section_id = '" . mysql_real_escape_string($section_id1) . "' 
       AND tna_question.id = tna_answer.question_id 
       AND tna_question.category_id = tna_category.id 
       AND tna_answer.member_id IN (".implode(",", $escaped_ids).") 
      ORDER BY tna_answer.question_id"; 

Никогда, никогда, никогда не ставить unescaped значения в вашем запросе.

Кроме того, вы больше не должны использовать функции mysql_. Вместо этого используйте вместо этого функции mysqli_.

+1

Можете также санизировать '$ section_id1' – Phil

+0

Спасибо , @Phil, я этого не замечал! – Okonomiyaki3000

Смежные вопросы