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; } }
и мне интересно с некоторым кодом.
?>
В конце строки кода? $user=User::model()->find('LOWER(username)=?',array($username));
зачем использовать LOWER(username)=?
не LOWER(username)=
. Почему это необходимо ?
, это какой-то условный запрос, который я еще не знал? ?>
действительно не нужно, согласно этой ссылке :
Закрывающий тег блока PHP в конце файла является необязательным, и в некоторых случаях его исключение полезно при использовании include () или require (), поэтому нежелательные пробелы не будут возникать в конце файлов, и вы все равно будете иметь возможность добавлять заголовки к ответу позже. Это также удобно, если вы используете буферизацию вывода и не хотели бы видеть добавленные нежелательные пробелы в конце частей, сгенерированных включенными файлами.
?
связан с синтаксисом SQL, как видно из этого . Также второй ответ здесь говорит о том, что:
Значок вопроса представляет собой параметр, который позже будет заменен. Использование параметризованных запросов более безопасно, чем встраивание параметров прямо в запрос.