Код Igniter Load Database, кажется, останавливает поток процесса - PullRequest
0 голосов
/ 23 октября 2010

Я только что настроил простой проект PHP Code Igniter на Windows 7, IIS 7, Fast CGI, без модулей.

, когда я загружаю базу данных в одну из функций класса Modelпри этом this->load->database() поток, кажется, останавливается на этой конкретной строке.Ни одна из последующих операций не выполняется.

class Account_model extends Model {

  var $userId = '';
  var $userName = '';
  var $requestToken = '';
  var $accessToken = '';
  var $enabled = false;
  var $startOfDay;
  var $endOfDay;

  function Account_model() {
      parent::Model();
  }

  function get($userId) {
      $this->load->database();
      $query = $this->db->get_where('accounts', array('userId' => $userId), 1, 0);
      return $query->result();
  }

  function insert() {
      $this->load->database();
      // ** stop **
      $this->db->insert('accounts', $this); //never gets to this
  }
}

Если я просто пропущу эту строку в целом, я получу неопределенную переменную php $ db в модели.

Контроллер вызывающей программы:

class SignUp extends Controller {

  function SignUp() {
      parent::Controller();
  }

  function createUser() {
      echo 'processing';

      $this->load->model('Account_model');

      $this->Account_model->userId = 'asd';
      $this->Account_model->userName = 'test_user_pls_delete';
      $this->Account_model->enabled = true;
      $this->Account_model->startOfDay = time();
      $this->Account_model->insert();

      echo 'done'; // never gets to this
  }
}

Я проверил правильность конфигурации базы данных (имя хоста, драйвер и т. Д.) И смог подключиться к серверу базы данных с компьютера с помощью рабочей среды MySQL.

$active_group = "default";
$active_record = TRUE;

$db['default']['hostname'] = "{omitted}";
$db['default']['username'] = "{omitted}";
$db['default']['password'] = "{omitted}";
$db['default']['database'] = "{omitted}";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";

База данныхимя таблицы: account

  • Id int (11) первичный ключ auto_increment
  • UserId varchar (255) utf8_general_ci
  • userName varchar (255) utf8_general_ci
  • requestToken varchar (255) utf8_general_ci
  • AccessToken varchar (255) utf8_general_ci
  • Включено tinyint (1)
  • время начала дня
  • время окончания дня * 10321033 *

    Есть идеи как это исправить?

Ответы [ 3 ]

1 голос
/ 25 октября 2010
  1. Вам нужно загрузить базу данных в модели или в автоконфигурации (см. Пост Anzeo)
  2. Невозможно получить доступ к модели, такой как $ this-> Account_model-> userId = 'asd';- нужно вызывать функции
  3. Вы не можете вставить $ this (также небезопасно)
  4. Изменить поле Enabled в db на тип BOOLEAN (TinyInt не требуется)

Следующее должно начать ...Контроллер:

class SignUp extends Controller {
  function SignUp(){
      parent::Controller();
  }
  function createUser(){
      echo 'processing';
      $this->load->model('Account_model');
      $result = $this->Account_model->insert($userId = 'asd', $userName = 'test_user', $enabled = 'true', $startOfDay = time());
      echo ($result == TRUE) ? 'insert successful' : 'insert failed';
  }
}

Модель:

class Account_model extends Model {
  function Account_model(){
      parent::Model();
      $this->db = $this->load->database('default', TRUE);
  }
  function add_user($userId, $userName, $requestToken = '', $accessToken = '', $enabled = 'false', $startOfDay = '', $endOfDay = '') {
      $user = array(
           'UserId' => $userId,
           'UserName' => $userName,
           'requestToken' => $requestToken,
           'accessToken' => $accessToken,
           'Enabled' => $enabled,
           'startOfDay' => $startOfDay,
           'endOfDay' => $endOfDay
        );
      $this->db->insert('accounts', $user);
      return ($this->db->affected_rows() > 0) ? TRUE : FALSE;
      }
  }
}
1 голос
/ 24 октября 2010

Хммм ... вот моя модель ..

class Account_model extends Model {

function Account_model() {
    // Call the Model constructor
    parent::Model();
    $this->db = $this->load->database('default', TRUE);
}

function showTables() {
    $query = "show tables";
    $rs = $this->db->query($query);
    return $rs->result_array();
}

загрузить базу данных в $ db, чтобы $ db мог обработать запрос.

0 голосов
/ 25 октября 2010

Вы можете либо автоматически загрузить библиотеку базы данных, добавив «database» в массив библиотеки в файле autoload.php, расположенном по адресу:

application/config/autoload.php

Или загрузите его ad-hoc. В обоих случаях это сделает нас из вашей конфигурации, расположенной по адресу:

application/config/database.php

Можете ли вы проверить, соответствует ли ваша конфигурация описанной выше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...