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;
}
}

и мне любопытно с некоторым кодом.

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

1 ответ

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

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

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

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

Другие вопросы по тегам