Ошибка PHP SQL-запроса - PullRequest
       10

Ошибка PHP SQL-запроса

0 голосов
/ 27 июля 2011

У меня есть некоторые проблемы с типом диалога в этом коде (работа с Facebook PHP SDK 3.0.1):

$page_id = 192485754113829;
$post_limit = 2;

$query = "select post_id, source_id, actor_id, target_id, created_time, likes, message, attachment, comments from stream where source_id = '.$page_id.' LIMIT '.$post_limit.'";

Ошибка синтаксического анализатора: неожиданная '.'в позиции 130.

Я не могу объяснить, что этот код не работает одинаково на разных хостингах.Есть ли какие-то настройки типа в php.ini

Ответы [ 6 ]

4 голосов
/ 27 июля 2011
$query = "select post_id, source_id, actor_id, target_id,
created_time, likes, message, attachment, comments
from stream where source_id = '$page_id' LIMIT $post_limit ";

будет работать.

Или, если вы хотите использовать конкатенацию:

$query = "select post_id, source_id, actor_id, target_id,
created_time, likes, message, attachment, comments
from stream where source_id =  ".$page_id." LIMIT ".$post_limit;
1 голос
/ 27 июля 2011

Это не имеет ничего общего с преобразованием типов, это просто ваши кавычки, которые ошибочны Код должен выглядеть так:

$page_id = 192485754113829;
$post_limit = 2;

$query = "select post_id, source_id, actor_id, target_id, created_time, likes, message, attachment, comments from stream where source_id = ".$page_id." LIMIT ".$post_limit."";
1 голос
/ 27 июля 2011
$query = "select post_id, source_id, actor_id, target_id, created_time, likes, message, attachment, comments from stream where source_id = '$page_id' LIMIT $post_limit";

или

$query = "select post_id, source_id, actor_id, target_id, created_time, likes, message, attachment, comments from stream where source_id = '".$page_id."' LIMIT ".$post_limit."";

(если page_id - целое число, вы можете написать его без кавычек)

проблема в кавычках.

0 голосов
/ 27 июля 2011

Вы в основном генерируете этот запрос (я переформатировал его для лучшего отображения):

select post_id, source_id, actor_id, target_id, created_time, likes,
    message, attachment, comments
from stream
where source_id = '.1.9248575411383E+14.' LIMIT '.2.'

Это ни в коем случае не допустимый SQL. Для начала вам нужно избавиться от дополнительных точек.

Помимо вашего неверного SQL, 192485754113829 - это очень большое целое число. Максимальный размер целых чисел зависит от платформы, но в моем компьютере ограничение составляет 2 ^ 32, что меньше вашего числа. Это означает, что PHP будет обрабатывать его как число с плавающей запятой, и вы потеряете точность. Учитывая, что это идентификатор, я предлагаю вместо этого использовать строки PHP.

0 голосов
/ 27 июля 2011

Вы думаете, что делаете конкатенацию строк, но это не так. Точки находятся внутри строки в двойных кавычках и, следовательно, не имеют особого значения. Они недопустимы в операторе SQL.

Поскольку переменные анализируются в двойных кавычках, вы можете сделать:

"select (...) where source_id = $page_id LIMIT $post_limit";

Если вы хотите использовать конкатенацию строк, вы должны правильно завершить строку:

'select (...) where source_id = ' . $page_id . ' LIMIT ' . $post_limit;

Подробнее о струнах.

0 голосов
/ 27 июля 2011

Это синтаксическая ошибка.Это не будет работать на любом хосте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...