SQL, где комбинация значений 0 и sha1 (значение, true) в активных записях CodeIgniter возвращает все строки - PullRequest
1 голос
/ 20 июля 2011

Итак, это мой вывод о реальной проблеме из вопроса, который я задал ранее здесь: Запрос SQL Select с активными записями CodeIgniter и «где sha1» возвращает запись первой строки

I 'Я также дважды публикую в форуме CodeIgniter: http://codeigniter.com/forums/viewthread/194502/ (последние достижения ...)

Вы можете получить несколько фрагментов кода из обоих.

Короче говоря, проблема в том, что яИмеется следующее, и я не уверен, кто на самом деле является виновником:

Я использую массив, как показано ниже, чтобы определить «где» в запросе выбора для функции активных записей.Запрос дает мне все строки в таблице, если использовать их в определенной комбинации, описанной ниже.

pasting ---

на самом деле похоже, что эта комбинация ошибок происходит только тогда, когда sha1 возвращает необработанный выводданные и адрес электронной почты <1 Например: </p>

$where = array(
          'email'     => 0,
          'password'  => sha1(false, true), # sha1($this->input>post('password'), true);
         ); 

, если sha1 (false, true) изменяется на sha1 (что угодно), ошибки нет.(«что угодно» включает в себя строки, логические значения и т. д.)

, если массив не изменяется и «email» => 0 заменяется на «email» => «0», что происходит в SQL QueryA, тогда это работаетправильно.Если я удаляю 's из значения в QueryA, как в Active Records, тогда я снова получаю все строки ...

Кроме того, я не получаю никаких строк (что правильно), когда' email '>> 0то есть 'email' => 1 (2,3 и т. д.) и даже когда 'email' => null.

Комбинация 'email' = 0 и sha1 ('any value', true) приводит к возвращению КАЖДОЙ строки в таблице в активных записях, поскольку к значению 0 не добавляются кавычки, однако кавычки добавляютсявокруг «пароль» = «значение».Если вокруг необработанного хэша нет кавычек, SQL возвращает ошибку и предотвращает запуск сценария .. (что лучше, чем когда-либо возвращать строку…)

Это может быть ошибкой SQL, поскольку это происходит только призначение 0 ... но это ошибка пользователя, чтобы не заключать в кавычки значение где?Если так, то должны ли Active Records автоматически указывать для меня значение, если оно целое или нет?Кажется, это делается для строковых значений, но не для целых чисел (false = 0, true = 1) ...

1 Ответ

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

Если вы хотите, чтобы в ваших запросах был одинаковый результат, напишите два одинаковых.В QUERY1 вы определяете свои термины следующим образом:

WHERE `email` = \''.$data['email'].'\' 
AND `password` = \''.$data['password'].'\' 

в QUERY2

# data for sql query
$where = array(
    'email'     => $this->input->post('email'),
    'password'  => sha1($this->input->post('password'), true);
);

Для QUERY1 и QUERY2 равны, QUERY2 будет:

# data for sql query
$where = array(
    'email'     => "'".$this->input->post('email')."'",
    'password'  => sha1($this->input->post('password'), true);
);

Codeigniterне может самостоятельно определить, что 0 не должно быть числом.Вы делаете это сами, как QUERY1.

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