MySQL Query в CodeIgniter с идентификатором сессии - PullRequest
2 голосов
/ 06 февраля 2010

Допустим, у меня есть запрос:

" SELECT * FROM table 
      WHERE donor_id = " .$this->session->userdata('id') ." 
      GROUP BY rating"

Тем не менее, похоже, что здесь я получаю синтаксическую ошибку mysql, ссылаясь на то, что $this->session->userdata('id') дает мне, например, '25' вместо 25. Есть ли здесь какие-нибудь обходные пути для предотвращения цитирования $this->session->userdata('id')?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 06 февраля 2010

В CI я делаю это все время:

$id = intval($this->session->userdata('id'));
$sql = "  SELECT * ".
       "    FROM table ".
       "   WHERE donor_id = {$id} ". 
       "GROUP BY rating ";
//process $sql below

Создание подобного запроса облегчит обнаружение ошибки и предотвратит внедрение SQL. Используйте конкатенацию, когда вам нужно разделить запрос на несколько строк вместо того, чтобы сделать его длинной длинной строкой, чтобы реальная строка запроса не стала слишком длинной. Сделайте отступ для ключевого слова SQL, чтобы упростить поиск логической и синтаксической ошибки.

1 голос
/ 06 февраля 2010

intval($this->session->userdata('id'))

1 голос
/ 06 февраля 2010

Предполагая, что вы имеете в виду, что он возвращает вам строку вместо целого числа, которое вы всегда можете попробовать использовать settype или intval:

$var = '2';
settype($var, "integer");
$var = intval($var);

Однако, если вы имеете в виду, что кавычки по какой-то причине жестко запрограммированы, вы можете заменить строку, если вы уверены, что значение не будет содержать кавычек:

ech str_replace("'", "", "'2'"); // prints 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...