YII CActiveRecord->find()
Я сейчас все еще изучаю YII на уроке блога и любопытно с некоторым кодом.
по этой ссылке
http://www.yiiframework.com/doc/blog/1.1/en/prototype.auth
есть такой код
<?php
class UserIdentity extends CUserIdentity
{
private $_id;
public function authenticate()
{
$username=strtolower($this->username);
$user=User::model()->find('LOWER(username)=?',array($username));
if($user===null)
$this->errorCode=self::ERROR_USERNAME_INVALID;
else if(!$user->validatePassword($this->password))
$this->errorCode=self::ERROR_PASSWORD_INVALID;
else
{
$this->_id=$user->id;
$this->username=$user->username;
$this->errorCode=self::ERROR_NONE;
}
return $this->errorCode==self::ERROR_NONE;
}
public function getId()
{
return $this->_id;
}
}
и мне любопытно с некоторым кодом.
- Почему нет
?>
в конце строки кода? - на этой линии
$user=User::model()->find('LOWER(username)=?',array($username));
зачем использоватьLOWER(username)=?
неLOWER(username)=
, Почему есть необходимость?
, это какой-то условный запрос, который я еще не знал, может быть?
1 ответ
?>
действительно не нужно, по этой ссылке:Закрывающий тег блока PHP в конце файла является необязательным, и в некоторых случаях его пропуск полезен при использовании include() или require(), поэтому нежелательные пробелы не будут появляться в конце файлов, и вы по-прежнему будете быть в состоянии добавить заголовки к ответу позже. Это также удобно, если вы используете буферизацию вывода и не хотите видеть добавленные нежелательные пробелы в конце частей, сгенерированных включенными файлами.
?
связано с синтаксисом SQL, как видно из здесь. Также второй ответ здесь говорит, что:Знак вопроса представляет параметр, который впоследствии будет заменен. Использование параметризованных запросов более безопасно, чем встраивание параметров прямо в запрос.