PHP не разбирает переменную в двойных кавычках - PullRequest
2 голосов
/ 06 февраля 2012

У меня следующий запрос:

var_dump($id); // string '51' (length=2)


$sql    = "SELECT * FROM table WHERE id=$id";

$result = mysql_query($sql, $db);

$myrow  = mysql_fetch_array($result);

var_dump($myrow) // null (NOT OK)

Когда я изменяю $ id для жестко запрограммированного значения (51), это работает:

$sql    = "SELECT * FROM table WHERE id=51";

$result = mysql_query($sql, $db);

$myrow  = mysql_fetch_array($result);

var_dump($myrow); // array 0 => string '51' (length=2) (OK)

Это как если бы $SQL не анализируется правильно.Это очень старый сайт, может ли это быть связано с версией PHP, для которой сайт был изначально создан?

$sql = "SELECT * FROM table WHERE id=".$id; 
// ALSO WORKS. But I am not really looking forward to doing a FIND & REPLACE

РЕДАКТИРОВАТЬ:

Сайт имеетсотни этих типов запросов.Это старый сайт, который был разработан моим кем-то еще.Мне было интересно, был ли параметр INI или что-то, что было переключено между версиями PHP, что я могу переключиться обратно.

Спасибо

Версия PHP: PHP5.2

Сайт был создан для версии 4. что-то.

Ответы [ 4 ]

0 голосов
/ 06 февраля 2012

Помимо того факта, что запросы должны быть экранированы (в данном случае будет достаточно приведения к целому числу) или, предпочтительно, созданы с помощью подготовленных операторов, я предполагаю, что это запрос не выполняется.

PHP анализировал строки в двойных кавычках с самого начала, поэтому попробуйте вывести значение $sql, чтобы увидеть, что отправляется в MySQL.

0 голосов
/ 06 февраля 2012

используйте это, пожалуйста:

SELECT * FROM table WHERE `id` = $id 

вставьте `в обе стороны от id

0 голосов
/ 06 февраля 2012

register_globals был выключен.Я знаю последствия для безопасности, но у меня есть это на его собственном виртуальном сервере, и у меня нет времени, чтобы исправить это.

В htaccess:

php_flag register_globals on 
0 голосов
/ 06 февраля 2012

вместо написания запроса, подобного этому

$sql = "SELECT * FROM table WHERE id=$id";

вы также можете использовать эту альтернативу ..

$sql = "SELECT * FROM table WHERE id='".$id."'";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...