2012-04-12 7 views
1

Нужна помощь в форматировании строки запроса mySQL. Следующий запрос возвращает "ошибка синтаксического анализа, ожидая T_STRING или 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

он уже сказал ошибку, проверьте, какая она. – Michelle

+0

@Jack - ошибка синтаксического анализа входит в оператор запроса $. Что-то в моей строке запроса неверно? –

+0

Вы действительно должны избегать этих или использовать PDO. – ngen

ответ

2

НЕ ДЕЛАЙТЕ ЭТО! он широко открыт для SQL-инъекций. Ради бога, проверяйте и избегайте ввода.

в по крайней мере, переписать его:

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

Да, это было. (Обратите внимание, что это НЕ одинарные кавычки, но ... какие ... обратные кавычки? Скрытие под ~ на моей клавиатуре.) –

+0

Они называются обратными окнами, и вы можете прочитать немного больше о них в этой теме: http://stackoverflow.com/questions/261455/using-backticks-around-field-names –

1

Запрос должен быть:

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

После прохождения их через mysql_real_escape_string() 'конечно. – rid

+0

eek, без пробелов! Запрос завершится с ошибкой, если переменные столбца не будут иметь в них передние и конечные пробелы. – orourkek

+0

Хорошо замечен. Исправлено: –

1

периодов (.) в вашем запросе не нужны, потому что вы не нарушили кавычки. Любой из них должен работать:

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

или

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

Edit: Это, конечно, не обращаясь гигантских дыр в безопасности инъекций:]

0

Ваши конкатенации в $query декларации неверны.

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

было бы достаточно.

0

Должно быть:

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

необходимо иметь переменную PHP, окруженную двойные кавычки (и оставить последний прочь, поскольку вы заканчиваете на переменную или вместо двойных кавычек, оставьте точки, потому что PHP увидит ее переменные и преобразует их в значения до запуска запроса. Кроме того, sql по какой-то причине не любит скопированные переменные массива. ставя ll ваши значения в переменных, которые также гораздо приятнее читать:

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