2015-07-31 2 views
1

Вот моя функция редактирования в контроллере CakePHP:CakePHP 2,6 извлечения данных из базы данных

public function edit($id = null) { 
if ($this->request->is('get')) { 
      $this->request->data = $this->Topic->findById($id); 
     } 
... 

Первая проблема заключается в том, что параметр идентификатор передается функции строкового типа не целое число. Во-вторых, что в базе данных есть тема с идентификатором = 14, и оба эти коды получить тот же результат, я не понимаю, почему:

http://localhost/cakephp1/topics/edit/14 
http://localhost/cakephp1/topics/edit/14anyCharactersHere 

ответ

0

Параметры передается по URL будет, конечно, по строки типа, поскольку URL-адрес является строкой.

Если предположить, что id столбец в базе данных является целым числом Cake будет отбрасывать параметр, переданный findById() в целое: (int)"14" и (int)"14anyCharactersHere" как результат в 14. Таким образом, оба URL-адреса в вашем вопросе приведут к тому, что из базы данных будут извлечены одни и те же данные.

Если вы хотите, чтобы убедиться, что $id содержит только целое использование ctype_digit(): -

if (ctype_digit($id) === true) { 
    // Is integer 
} 
Смежные вопросы