2012-04-12 4 views
0

У меня есть это:переменной PHP в SQL запросе

$result = mysql_query("SELECT * FROM animals WHERE hand= " .$_SESSION['SESS_HAND']. "); 

Но всегда показывает "Синтаксическая ошибка: ошибка разбора, ожидая T_STRING' or T_VARIABLE» или `T_NUM_STRING"

+0

Вы понимаете, что у вас есть '" 'прямо перед') 'в конце строки делает его избежать?. – Willy

ответ

4

Всегда бежать строковые переменные:

$result = mysql_query("SELECT * FROM animals WHERE hand= '" . 
mysql_real_escape_string($_SESSION['SESS_HAND']). "'"); 
+0

Благодарю вас обоих! –

0

попробовать:

$result = "SELECT * FROM animals WHERE hand= " . $_SESSION['SESS_HAND']; 

mysql_query($result); 

Кроме того, делая это, вы можете отладить свой запрос и увидеть именно то, что он делает в SQL, написав:

echo $result; 
2

Причина ваш запрос does'nt работа, так как значение вашего WHERE is'nt между одинарные кавычки.

EDIT: Квентин тоже прав, вы не закрыли кавычки в последнем скобке;).

Это сделало бы работу запроса:

$result = mysql_query("SELECT * FROM animals WHERE hand= '" .$_SESSION['SESS_HAND']. "'"); 

Но как a1ex07 указывает, вы должны бежать переменные ВСЕГДА! Выше запрос уязвим для инъекций MySQL. В нижнем примере показан правильный путь, экранируя переменную и, на мой взгляд, немного лучше читаемый код;).

$query = "SELECT * FROM `animals` 
WHERE `hand` = '" .mysql_real_escape_string($_SESSION['SESS_HAND']). "'"; 

mysql_query($query); 
0

Это дает сообщение об ошибке, потому что вы никогда не закончить строку, которую вы пытаетесь добавить после данных сеанса: ");.

Не создавайте SQL-запросы, хотя вы можете сшить строки. Use prepared statements and parameterized queries.

-1

Проблема:

$result = mysql_query("SELECT * FROM animals WHERE hand= " .$_SESSION['SESS_HAND']. "); 

Решение:

if (!$sessHand = mysql_real_escape_string($_SESSION['SESS_HAND'])) 
{ 
echo "There was a error: " . mysql_error(); 
} 
else 
{ $result = mysql_query("SELECT * FROM animals WHERE hand=$sessHand") } 
+3

Что это за сообщение? –

+1

@Willy Спасибо за редактирование. –

+0

Добро пожаловать в SO slipfeed! Пожалуйста, попробуйте использовать «зрелый язык» здесь! – Willy

Смежные вопросы