Итак, это мой вывод о реальной проблеме из вопроса, который я задал ранее здесь: Запрос 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) ...