2015-05-10 4 views
1

Я начинаю начинать php, я сталкиваюсь с проблемой при попытке использовать несколько запросов в php.Php Многопользовательский поиск запросов из нескольких таблиц

SELECT student.id, student.name, fee_slip.payamount, fee_slip.time, student.class 
FROM student 
LEFT JOIN fee_slip 
ON student.id=fee_slip.student 
where (fee_slip.student) is null 

Это код, который прекрасно работает без ошибок. Но теперь я хочу сделать это более динамично.

У меня есть код, который также работает хорошо, но я использую его на одной таблице здесь является код

$query = "SELECT id, name, std_reg_number, class, section FROM student where id IS NOT NULL "; 

     if ($name !=""){ 
      $query .= " AND `name` LIKE '".$name."%'"; // id is greater then 
     } 


     if ($status !=""){ 
      $query .= " AND `status` LIKE '".$status."%'"; // id is greater then 
     } 


      if ($class !=""){ 
      $query .= " AND class IN($class) ORDER BY class DESC"; // Selecting class 
     } 

     if ($section !=""){ 
      $query .= " AND section IN($section)"; // selecting section 
     } 


     if ($sort !=""){ 
      $query .= " ORDER BY $sort ASC"; // Selecting religion 
     } 

$result = mysql_query($query); 

Теперь я пытался использовать подзапрос

$query .= " SELECT fee_slip.student_id, fee_slip.std_reg_number, fee_slip.payamount, fee_slip.totalamount "; 

Но я не гер результат.

Что я должен делать .......

+1

Первое, что вам нужно сделать, это: прекратить использование устаревшего интерфейса mysql и вместо этого использовать mysqli или PDO. Второе, что вам нужно сделать, это остановить создание уязвимостей SQL Injection, включив потенциально небезопасные значения в текст SQL, либо надлежащим образом экранируя значения (например, используя mysqli_real_escape_string), либо используя подготовленные операторы с привязками привязок. – spencer7593

+0

Я не понимаю отношения между запросом, показанным в начале вопроса, и кодом, который показан. Мы видим, что код динамически создает текст SQL (уязвим для SQL Injection) и выполняет запрос. Затем мы видим, что SQL * добавлен * к существующему тексту SQL. Это * не * возможно выполнить два разных оператора SELECT за одно исполнение с использованием интерфейса mysql. (Один из подходов состоит в объединении результатов из двух запросов с использованием 'UNION ALL' (столбцы должны выстраиваться в линию, считать и dataype и добавлять столбец дискриминатора), поэтому это всего лишь одно утверждение. – spencer7593

+0

После объединения все можно достичь того, что я необходимо –

ответ

1

Существует большая разница между терминами «subquery» и «multi-query». Кажется, вы смешиваете эти концепции.

Предполагая, что выполненный вами запрос работает так, как вам нужно, кажется, вы можете просто заменить значение $query в коде, и оно будет работать так же хорошо, как и запрос, который у вас есть сейчас. (Возможно, вам придется добавлять имена таблиц/псевдонимов в поля в предложениях WHERE, чтобы избежать двусмысленности. В зависимости от структуры вашей таблицы.)

В любом случае, добавление еще одного SELECT после запроса у вас есть isn ' t путь.

Я бы тоже, как и другие, передо мной, указать, что старые функции MySQL API устарели и что ваш код пронизан проблемами безопасности. - Подготовленные заявления через PDO или MySQLi должны использоваться в наши дни.

+0

Итак, как достичь этого –