2012-04-12 13 views
1

Hilfe bei der Formatierung einer mySQL-Abfragezeichenfolge. Die folgende Abfrage gibt "Parse-Fehler, erwartet T_STRING oder T_VARIABLE"

PHP:

<?php 


include 'db_connect.php'; 

mysql_select_db($databaseName, $con); 

$query = "SELECT * FROM .$_POST['tab']. WHERE plant_code = .$_POST['plant_code']"; 

$result = mysql_query($query) or die (mysql_error()); 

$row = mysql_fetch_assoc($result); 

echo json_encode($row); 

?> 

jQuery:

$('#profiles_desktops').click(function(){ 
       $.post("php/loadProfile.php", {plant_code : selectedSite, tab : "profiles_desktops"}, function(result){ (do something here...) }); }); 
+0

es bereits sagte der Fehler, überprüfen Sie, welche Zeile es ist. – Michelle

+0

@Jack - der Parse-Fehler kommt in der $ query-Anweisung. Etwas über meine Abfragezeichenfolge ist falsch? –

+0

Sie sollten wirklich denen entkommen oder PDO verwenden. – ngen

Antwort

2

TUN SIE DAS NICHT! Es ist offen für SQL-Injection-Angriffe. Um Gottes Willen, validiere und entkomme deinem Input.

bei das Mindeste, schreiben Sie es an:

$query = "SELECT * FROM `".mysql_real_escape_string($_POST['tab'])."` WHERE plant_code = '".mysql_real_escape_string($_POST['plant_code'])."'"; 
+0

Yup, das hat es getan. (Beachte bitte, dass das keine einfachen Anführungszeichen sind, sondern ... was ... Back-Anführungszeichen? Versteckt sich unter der ~ auf meiner Tastatur.) –

+0

Sie werden Backticks genannt und du kannst ein bisschen mehr über sie in diesem Thread lesen: http://stackoverflow.com/questions/261455/using-backticks-around-field-names –

1

sollte Abfrage sein:

"SELECT * FROM ".$_POST['tab']." WHERE plant_code =".$_POST['plant_code'] 
+2

Nach der Übergabe durch mysql_real_escape_string() 'natürlich. – rid

+0

eek, keine Leerzeichen! Die Abfrage würde fehlschlagen, es sei denn, die Post-Variablen haben führende und nachfolgende Leerzeichen in ihnen – orourkek

+0

Gut entdeckt. Fixed now :) –

1

Die Punkte (.) in Ihrer Abfrage sind unnötig, weil Sie die Anführungszeichen nicht gebrochen haben. Beides sollte funktionieren:

$query = "SELECT * FROM $_POST['tab'] WHERE plant_code = $_POST['plant_code']"; 

oder

$query = "SELECT * FROM " . $_POST['tab'] . " WHERE plant_code = " . $_POST['plant_code']; 

Edit: Das ist natürlich nicht die Riesen-Injektion Sicherheitslücken Adressierung:]

0

Ihre Verkettungen in $query Erklärung falsch sind.

$query = "SELECT * FROM " . $_POST['tab'] . "WHERE plant_code = '" . mysql_real_escape_string($_POST['plant_code']) . "'"; 

würde ausreichen.

0

werden sollten:

$query = "SELECT * FROM ".$_POST['tab']." WHERE plant_code = ".$_POST['plant_code']; 

benötigt, um die PHP-Variablen in doppelte Anführungszeichen gesetzt haben (und lassen Sie das letzte aus, Da Sie mit einer Variablen oder anstelle von doppelten Anführungszeichen enden, lassen Sie die Punkte weg, da PHP seine Variablen sehen und in die Werte konvertieren wird, bevor die Abfrage ausgeführt wird.Auch sql mag Klammervariablen aus irgendeinem Grund nicht setzen ll deine Werte in Variablen, die auch viel besser zu lesen ist:

$tab = $_POST['tab']; 
$plant = $_POST['plant_code']; 
$query = "SELECT * FROM ".$tab." WHERE plant_code = ".$plant;