2010-11-22 41 views
0

J'essaie de mettre GROUP comme concat dans mon PHP-Firebird. Mais ça ne marche pas. mon script comme:GROUP BY ne fonctionne pas pendant la concat

$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.";"; 

comment puis-je faire pour résoudre ce problème? avez-vous des sites ou un tutoriel sur PHP-CONCATENATION que je peux apprendre plus complètement? merci d'avance.


$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); 
} 
+0

Pouvez-vous nous montrer à quoi ressemblent $ sWhere et $ sOrder? Votre SQL devrait fonctionner correctement en supposant qu'il y ait des espaces sur les bords des variables comme $ sGroupBy a – pinkfloydx33

+0

ups..sorry je suis en retard – klox

+0

Quel est le $ sLimit? –

Répondre

1

SELECT X, Y, Z GROUP BY X n'a pas de sens; Vous devez également regrouper par Y et Z ou les utiliser dans une fonction d'agrégation. DISTINCT fonctionne également, voir postgreSQL group by different from mysql?.

Vous utilisez également la saisie utilisateur directement lors de la création d'une chaîne de requête, qui est une invitation à l'injection SQL. Utilisez des requêtes paramétrées. (L'échappement de l'utilisateur semble également être une solution populaire, mais je ne comprends pas pourquoi.) En supposant que vous ne remplacez pas $_POST contenu avec des chaînes échappées ou en utilisant des guillemets magiques, ce qui serait une mauvaise pratique, mais rien d'aussi grave que une vulnérabilité d'injection SQL.

Si vous pensez que quelque chose ne va pas dans votre requête SQL, la première chose à faire est de l'imprimer et de l'examiner. En l'état, une simple entrée sSearch comme don't aurait pu casser votre code.

+0

Je ne comprends pas. Vous devez nous montrer des exemples de requêtes réelles envoyées à Firebird. – aib