У меня есть функция, которая извлекает данные пользователя из базы данных MySQL.
Если предоставленный аргумент функции является целым числом, функция обрабатывает его как идентификатор пользователя, если аргумент представляет собой строку, она проверяет, является ли строка ключом в предопределенном массиве, если аргумент является ключом в массиве, тогда он обрабатывает аргумент как идентификатор user_group (полученный из файла конфигурации), если аргумент является строкой, но не находится в ключах массива, тогда он обрабатывает аргумент как имя пользователя, если ни один из условия выполняются, выдается ошибка.
Проблема: если я указываю имя пользователя (строку) в функцию, она работает так, как должна. Если я предоставлю строку, которая является ключом в предопределенном массиве, это сработает.
Если я укажу идентификатор пользователя (int), это будет работать для всех идентификаторов, кроме 1. То есть, если $param равен 1, это дает мне «Ошибку 3» (ниже в коде), если предоставленное целое число является чем-то еще, что является идентификатором в базе данных, тогда это работает.
Идентификатор 1 действительно существует в базе данных. Странно то, что var_dump() на самом деле выгружает правильные данные, даже если предоставленный идентификатор равен 1.
Это последняя строка запроса: SELECT * FROM user as u JOIN user_details as ud ON u.id = уд.id_user ГДЕ ты.username = '1'
Очевидно, что 1 рассматривается как строка, а не как целое число. Почему? И почему он все еще извлекает первую запись (id=1), хотя идентификатор обрабатывается как имя пользователя u.username = '1'?
Если я добавлю $param = 1; в начале функции _initialize ( $param ), то я получу следующую ошибку.
Неустранимая ошибка: исчерпан разрешенный объем памяти 134217728 байт (пробовал
выделить 49 байт) в
E:\APACHE\htdocs\codeigniter\lib\system\database\DB_query_builder.php
в строке 2677
protected function _initialize ( $param )
{
$this->ci->db->select ( '*' );
$this->ci->db->from ( $this->tableUser [ 'table' ] . ' as u' );
$compare = NULL;
if ( is_int ( $param ) ){
$compare = $this->tableUser [ 'column' ] [ 'id' ];
}
elseif ( is_string ( $param ) && array_key_exists ( $param, $this->constantsServices ) ){
$compare = $this->tableUser [ 'column' ] [ 'id_user_groups' ];
$param = $this->constantsServices [ $param ];
}
else if ( is_string ( $param ) ){
$compare = $this->tableUser [ 'column' ] [ 'username' ];
}else {
throw new Exception ( 'Error 1' );
}
$this->ci->db->where ( 'u.' . $compare, $param );
$this->ci->db->join ( $this->tableUserDetails [ 'table' ] . ' as ud', 'u.' . $this->tableUser [ 'column' ] [ 'id' ] . ' = ud.' . $this->tableUserDetails [ 'column' ] [ 'id_user' ] );
$query = $this->ci->db->get ( );
if ( ! $query ){
throw new Exception ( 'Error 2' );
}
$data = $query->unbuffered_row('array');
var_dump ( $data );
if ( !isset ( $data ) ){
throw new Exception ( 'Error 3' );
}
}
Подробнее здесь: https://stackoverflow.com/questions/332 ... accordance
Метод модели с множественной ответственностью в CodeIgniter не работает в соответствии с типом параметра и правилами кач ⇐ Php
Кемеровские программисты php общаются здесь
1769928771
Anonymous
У меня есть функция, которая извлекает данные пользователя из базы данных MySQL.
Если предоставленный аргумент функции является целым числом, функция обрабатывает его как идентификатор пользователя, если аргумент представляет собой строку, она проверяет, является ли строка ключом в предопределенном массиве, если аргумент является ключом в массиве, тогда он обрабатывает аргумент как идентификатор user_group (полученный из файла конфигурации), если аргумент является строкой, но не находится в ключах массива, тогда он обрабатывает аргумент как имя пользователя, если ни один из условия выполняются, выдается ошибка.
[b]Проблема[/b]: если я указываю имя пользователя (строку) в функцию, она работает так, как должна. Если я предоставлю строку, которая является ключом в предопределенном массиве, это сработает.
Если я укажу идентификатор пользователя (int), это будет работать для всех идентификаторов, кроме [b]1[/b]. То есть, если $param равен 1, это дает мне «Ошибку 3» (ниже в коде), если предоставленное целое число является чем-то еще, что является идентификатором в базе данных, тогда это работает.
Идентификатор [b]1[/b] действительно существует в базе данных. Странно то, что var_dump() на самом деле выгружает правильные данные, даже если предоставленный идентификатор равен 1.
Это последняя строка запроса: SELECT * FROM user as u JOIN user_details as ud ON u.id = уд.id_user ГДЕ ты.username = '1'
Очевидно, что 1 рассматривается как строка, а не как целое число. [b]Почему?[/b] И почему он все еще извлекает первую запись (id=1), хотя идентификатор обрабатывается как имя пользователя u.username = '1'?
Если я добавлю $param = 1; в начале функции _initialize ( $param ), то я получу следующую ошибку.
Неустранимая ошибка: исчерпан разрешенный объем памяти 134217728 байт (пробовал
выделить 49 байт) в
E:\APACHE\htdocs\codeigniter\lib\system\database\DB_query_builder.php
в строке 2677
protected function _initialize ( $param )
{
$this->ci->db->select ( '*' );
$this->ci->db->from ( $this->tableUser [ 'table' ] . ' as u' );
$compare = NULL;
if ( is_int ( $param ) ){
$compare = $this->tableUser [ 'column' ] [ 'id' ];
}
elseif ( is_string ( $param ) && array_key_exists ( $param, $this->constantsServices ) ){
$compare = $this->tableUser [ 'column' ] [ 'id_user_groups' ];
$param = $this->constantsServices [ $param ];
}
else if ( is_string ( $param ) ){
$compare = $this->tableUser [ 'column' ] [ 'username' ];
}else {
throw new Exception ( 'Error 1' );
}
$this->ci->db->where ( 'u.' . $compare, $param );
$this->ci->db->join ( $this->tableUserDetails [ 'table' ] . ' as ud', 'u.' . $this->tableUser [ 'column' ] [ 'id' ] . ' = ud.' . $this->tableUserDetails [ 'column' ] [ 'id_user' ] );
$query = $this->ci->db->get ( );
if ( ! $query ){
throw new Exception ( 'Error 2' );
}
$data = $query->unbuffered_row('array');
var_dump ( $data );
if ( !isset ( $data ) ){
throw new Exception ( 'Error 3' );
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/33213287/multi-responsibility-model-method-in-codeigniter-is-not-performing-in-accordance[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия