GROUP BY не работает во время конкурса - PullRequest
0 голосов
/ 22 ноября 2010

Я пытаюсь указать GROUP как concat в моем PHP-Firebird.Но, похоже, не работает.мой сценарий, как:

 $sGroupBy = " GROUP BY LINE_NAME ";

 $sQuery = "SELECT ".$sLimit." LINE_NAME, MODEL_ONLY, VER_ONLY, PROD_NO, 
            LOT_SIZE, START_SERIAL, SERIAL_NO_LOW, SERIAL_NO_UP, PROD_DATE 
            FROM DOC_TO".$sWhere.$sGroupBy.$sOrder.";";

Как мне решить эту проблему?У вас есть несколько сайтов или учебник по PHP-CONCATENATION, которые я могу узнать более полно?спасибо за продвижение.


$sOrder = " ORDER BY PROD_DATE DESC ";

$sWhere = " WHERE (LINE_NAME LIKE '".$_POST['sSearch']."%' OR
          MODEL_ONLY LIKE '%".$_POST['sSearch']."%' OR ".
          " VER_ONLY LIKE '%".$_POST['sSearch']."%' OR ".
          " LOT_SIZE LIKE '%".$_POST['sSearch']."%' OR ".
          " START_SERIAL LIKE '%".$_POST['sSearch']."%' OR ".
          " SERIAL_NO_LOW LIKE '%".$_POST['sSearch']."%' OR ".
          " SERIAL_NO_UP LIKE '%".$_POST['sSearch']."%' OR ".
          " PROD_NO LIKE '%".$_POST['sSearch']."%' OR ".
          " PROD_DATE LIKE '%".$_POST['sSearch']."%') ";
$sLimit = "";
if ( isset( $_POST['iDisplayStart'] ) )
{
  settype($iDisplayStart,'integer');
  $iDisplayStart = $_POST['iDisplayStart'];
  $iDisplayLength = $_POST['iDisplayLength'];
  $sLimit = sprintf(" FIRST %d SKIP %d ",$iDisplayLength,$iDisplayStart);
}

1 Ответ

1 голос
/ 22 ноября 2010

SELECT X, Y, Z GROUP BY X не имеет смысла; вам также нужно сгруппировать по Y и Z или использовать их в статистической функции. DISTINCT также работает, см. группу postgreSQL, отличную от mysql? .

Вы также используете пользовательский ввод непосредственно при создании строки запроса, которая является приглашением для внедрения SQL. Используйте параметризованные запросы. (Выход из пользовательского ввода также, кажется, является популярным решением, хотя я не могу понять, почему.) Это предполагает, что вы не заменяете содержимое $_POST на экранированные строки или не используете магические кавычки, которые оба были бы плохой практикой, но ничего, как серьезная уязвимость в SQL-инъекциях.

Если вы считаете, что с вашим SQL-запросом что-то не так, первое, что вы должны сделать, это распечатать его и изучить. На самом деле, простой sSearch ввод, такой как don't, мог сломать ваш код.

...