2011-05-24 14 views
0

Je le script comme:Confondre dans concaténation de phpmysql

$sLimit = ""; 
     if (isset($_POST['iDisplayStart']) && $_POST['iDisplayLength'] != '-1') 
     { 
       $sLimit = "LIMIT ".mysql_real_escape_string($_POST['iDisplayStart']).", ". 
         mysql_real_escape_string($_POST['iDisplayLength']); 
     } 


if (isset($_POST['iSortCol_0'])) 
     { 
       $sOrder = "ORDER BY "; 
       for ($i=0 ; $i<intval($_POST['iSortingCols']) ; $i++) 
       { 
         if ($_POST[ 'bSortable_'.intval($_POST['iSortCol_'.$i]) ] == "true") 
         { 
           $sOrder .= $aColumns[ intval($_POST['iSortCol_'.$i]) ]." 
             ".mysql_real_escape_string($_POST['sSortDir_'.$i]) .", "; 
         } 
       } 

       $sOrder = substr_replace($sOrder, "", -2); 
       if ($sOrder == "ORDER BY") 
       { 
         $sOrder = ""; 
       } 
     } 


$sGroupBy = " GROUP BY A.Range_sampling, A.Lot_no "; 
       $sQuery = "SELECT SQL_CALC_FOUND_ROWS DATE(A.Inspection_datetime) AS Date, A.Line, A.Model, 
            A.Lot_no,A.Range_sampling,COUNT(A.Serial_number) AS Error,B.name AS PIC 
          FROM inspection_report A 
          LEFT JOIN Employee B 
          ON A.NIK=B.NIK 
          WHERE CHAR_LENGTH(A.Range_sampling) < 17 
          AND MONTH(A.Inspection_datetime)=MONTH(CURRENT_DATE)" .$sGroupBy.$sOrder.$sLimit; //error 
     $rResult = mysql_query($sQuery) or _doError(_ERROR30 . ' (<small>' . htmlspecialchars($sql) . '</small>): ' . mysql_error()); 

pour ce script je me suis erreur:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '0, 10' at line 7 

après ajouter un espace show:

Error message is :: "Error occuered during query execution: (<small></small>): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'desc LIMIT 0, 10' at line 8"; 

La requête complète:

SELECT SQL_CALC_FOUND_ROWS DATE(A.Inspection_datetime) AS Date, A.Line, A.Model, A.Lot_no,A.Range_sampling,COUNT(A.Serial_number) AS Error,B.name AS PIC FROM inspection_report A LEFT JOIN Employee B ON A.NIK=B.NIK WHERE CHAR_LENGTH(A.Range_sampling) < 17 AND MONTH(A.Inspection_datetime)=MONTH(CURRENT_DATE) GROUP BY A.Range_sampling, A.Lot_no ORDER BY desc LIMIT 0, 10

+1

Donnez-nous ** sql-texte brut * * sans aucune variable PHP. – zerkms

+0

Pouvez-vous répéter ce que la requête complète devient? – judda

+0

Je vais vous dire qu'il vous manque un espace après LIMIT. Je trouve que l'erreur est généralement directement avant la chaîne donnée dans le message d'erreur. edit - oops – dgig

Répondre

1

Essayez de mettre des espaces au début et à la fin des chaînes comme « ORDER BY » et « LIMITE ».

Également, affichez la valeur finale de la variable sQuery erronée.

Maintenant, vous ne disposez pas d'un champ dans la clause ORDER BY:

ORDER BY desc LIMIT 0, 10 

Entre BY et desc doit être le nom du champ par lequel vous triez

+0

Que voulez-vous dire de la valeur finale de la variable sQuery erronée? – nunu

+0

après ajouter l'espace show: 'Message d'erreur est ::" Erreur Occuéré pendant l'exécution de la requête: (): Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'desc LIMIT 0, 10' à la ligne 8 ";' – nunu

+0

faire un 'print ($ sQuery);' juste après l'assign, et avant '$ rResult = mysql_query ($ sQuery) ..' et nous montre le résultat de cette impression, donc nous pouvons voir comment la chaîne a été construite –