2016-06-20 10 views
0

Ich versuche, neue Databases zu machen und folgende tutorial. Aber ich bekam eine Fehlermeldung:PHP: Show Fehler auf MySQL Abfrage mit Verkettung

"Error occuered during query execution: (<small>SELECT a.idrec,a.date, a.model, a.serial, a.item,a.symptom, a.remark 
    FROM second_sampling AS a 
    WHERE 1=1 ORDER BY  LIMIT , </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 'LIMIT ,' at line 3"; 

die Syntax ist:

$requestData= $_REQUEST; 

$columns = array( 
// datatable column index => database column name 
     0 => 'idrec', 
     1 => 'date', 
     2 => 'model', 
     3 => 'serial', 
     4 => 'item', 
     5 => 'symptom', 
     6 => 'remark' 
     ); 
$sql = "SELECT a.idrec,a.date, a.model, a.serial, a.item,a.symptom, a.remark 
     FROM second_sampling AS a 
     WHERE 1=1"; 
if(!empty($requestData['search']['value'])) { // if there is a search parameter, $requestData['search']['value'] contains search parameter 
     $sql.=" AND (a.date LIKE '".$requestData['search']['value']."%' ";  
     $sql.=" OR a.model LIKE '".$requestData['search']['value']."%' "; 
     $sql.=" OR a.serial LIKE '".$requestData['search']['value']."%' "; 
     $sql.=" OR a.item LIKE '".$requestData['search']['value']."%' "; 
     $sql.=" OR a.symptom LIKE '".$requestData['search']['value']."%' "; 
     $sql.=" OR a.remark LIKE '".$requestData['search']['value']."%')"; 
} 

$query=mysql_query($sql) or _doError(_ERROR30 . ' (<small>' . htmlspecialchars($sql) . '</small>): ' . mysql_error()); 
$totalFiltered = mysql_num_rows($query); 
$sql. =" ORDER BY ". $columns[$requestData['order'][0]['column']]." ".$requestData['order'][0]['dir']." LIMIT ".$requestData['start']." ,".$requestData['length']." "; 
$query=mysql_query($sql) or _doError(_ERROR30 . ' (<small>' . htmlspecialchars($sql) . '</small>): ' . mysql_error()); 

versuchen, die Ursache zu schließen und setzen:

<?php 
    echo "<pre>"; 
    print_r($_REQUEST); 
    echo "</pre>"; 
?> 

dann zeigen:

{"draw":0,"recordsTotal":49,"recordsFiltered":49,"data":[]} 
Array( [sEcho] => 1 [iColumns] => 7 [sColumns] => ,,,,,, [iDisplayStart] => 0 [iDisplayLength] => 10 
+0

Scheint, dass '$ requestData ['length']' nicht definiert ist. –

+0

Hinweis: Die 'mysql_ *' - Funktionen sind veraltet, sie wurden aus PHP 7 entfernt, Ihr Code funktioniert nicht mehr, wenn Sie auf diese Version upgraden. Sie sollten keinen neuen Code mit ihnen schreiben, sondern stattdessen [mysqli_ * oder PDO] (http://php.net/manual/en/mysqlinfo.api.choosing.php) verwenden. –

+0

@GeraldSchneider Ich benutze alte PHP 5.3 – nunu

Antwort

1

Ihre vars

$columns[$requestData['order'][0]['column']] 
$requestData['start'] 
$requestData['length'] 

so die

$sql. =" ORDER BY ". $columns[$requestData['order'][0]['column']]." ". 
$requestData['order'][0]['dir']. 
" LIMIT ".$requestData['start']." ,".$requestData['length']." "; 

produzieren falsche Abfrage-Klausel

ORDER BY  LIMIT , 
+0

Ich legte die Erklärung in meinem aktualisierten Beitrag. – nunu

+0

vor der Abfrage überprüfen, ob die var si meine Antwort leer sind und schließlich den Standardwert für eine Verwendung in der Abfrage zuweisen – scaisEdge

0

In der Ausgabe SQL sollte durch zwischen den ORDER BY und den LIMIT, und dann zwei Zahlen getrennt ein Spaltenname ein Komma nach der LIMIT.

Die Tatsache, dass dies nicht geschieht, scheint anzuzeigen, dass die Variable $requestData leer ist oder zumindest nicht mit den Werten gefüllt ist, die Sie erwartet haben.

Ich würde versuchen:

var_dump($requestData); 

um herauszufinden, was wirklich in den Variablen $requestData ist.

+0

Ich habe meinen Beitrag aktualisiert – nunu

+0

OK! '$ requestData' ist eine Kopie von' $ _REQUEST', aber wissen Sie, was in '$ _REQUEST?' steht. Es wird normalerweise gefüllt, wenn Sie eine Seite nach dem Absenden eines Formulars laden, oder Sie Daten mit einer Abfrage übergeben (so sehen Sie etwa? Ordnung = col? In der Adressleiste des Browsers? –

+0

Was passiert, wenn Sie anrufen die Seite mit '? Start = 1 & Länge = 100' nach dem Seitennamen als Ort? –

0

Ihre Erklärung ist ungültig

WHERE 1=1 ORDER BY  LIMIT , 

Dieser Teil ist das Problem:

$sql. =" ORDER BY ". $columns[$requestData['order'][0]['column']]." ".$requestData['order'][0]['dir']." LIMIT ".$requestData['start']." ,".$requestData['length']." "; 

Die request $columns[$requestData['order'][0]['column']], $requestData['order'][0]['dir'], $requestData['start'], und $requestData['length'] ist leer.