YII CActiveRecord-> find ()

Im теперь все еще изучает 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; } } 

и мне интересно с некоторым кодом.

  1. Почему нет ?> В конце строки кода?
  2. в этой строке $user=User::model()->find('LOWER(username)=?',array($username)); зачем использовать LOWER(username)=? не LOWER(username)= . Почему это необходимо ? , это какой-то условный запрос, который я еще не знал?

    1. ?> действительно не нужно, согласно этой ссылке :

      Закрывающий тег блока PHP в конце файла является необязательным, и в некоторых случаях его исключение полезно при использовании include () или require (), поэтому нежелательные пробелы не будут возникать в конце файлов, и вы все равно будете иметь возможность добавлять заголовки к ответу позже. Это также удобно, если вы используете буферизацию вывода и не хотели бы видеть добавленные нежелательные пробелы в конце частей, сгенерированных включенными файлами.

    2. ? связан с синтаксисом SQL, как видно из этого . Также второй ответ здесь говорит о том, что:

      Значок вопроса представляет собой параметр, который позже будет заменен. Использование параметризованных запросов более безопасно, чем встраивание параметров прямо в запрос.