【问题标题】:Inserting data into Database CodeIgniter 3.x将数据插入数据库 CodeIgniter 3.x
【发布时间】:2018-05-14 02:49:58
【问题描述】:

我正在尝试使用 CodeIgniter 3.x 将数据插入到 MySqli 表中。

由于某种原因,CodeIgniter 查询生成器documentation 中定义的数据库方法似乎都不适合我。

使用

$data = array(
'created_at' => date('Y/m/d h:i:s'),
'updated_at' => date('Y/m/d h:i:s'),
'first_name' => $firstName,
'last_name' => $lastName,
'email' => $email,
'auth_key' => $password,
'enabled' => '1',
'deleted' => '0');

$test = $this->db->insert('users', $data);

给我错误:调用未定义的方法“插入”。这是 CodeIgniter 文档中定义的方法。尽管我也在我的模型中尝试过,但我正在从我的控制器中调用此代码。

我已经能够使用此处的代码成功运行 SQL 语句并从数据库中获取数据:

    $query = $this->db->table('users')
             ->select('*')
             ->where($this->table . '.auth_key', $password)
             ->where($this->table . '.email', $email)
             ->where($this->table . '.enabled', 1)
             ->get()->getRowArray();

但是,这与我在文档中看到的语法不同。如何将 $data 数组插入 MySQLi 数据库中的用户表??

谢谢,如果我需要澄清任何事情,请告诉我!

【问题讨论】:

  • 我认为您的代码没有任何问题。您确定您已加载数据库并且已正确连接到它吗?
  • 我已加载数据库并正确连接到它,我的代码的后半部分运行良好并从数据库返回有效结果。当我使用第一个 sn-p 中的代码将数据插入表中时,我收到一条错误消息,指出插入是“调用未定义的方法 CodeIgniter\Database\MySQLi\Connection::insert()”。
  • 我很确定您使用的是某种 3rd 方工具而不是查询构建器,因为其中没有 table() 函数 - 所以您的查询 $this->db->table().. 甚至无法与 Codeigniter 一起使用3.x - 我假设你使用 CI 4...,这是完全不同的事情,因为它甚至没有脱离 alpha 状态。(目前仍处于第 2 阶段的开发阶段)
  • @Pecans 亲爱的你正在混合 CI 3 和 CI 4,你上面给出的链接是 CI 3,这里是 CI 4:bcit-ci.github.io/CodeIgniter4/database/index.html
  • 你应该使用 $db = \Config\Database::connect(); $builder = $db->table('users'); $builder->insert($data);像这样插入记录

标签: php mysql codeigniter


【解决方案1】:

使用 Insert_String 代替 Insert 可能会解决您的问题,

$data = array(
'created_at' => date('Y/m/d h:i:s'),
'updated_at' => date('Y/m/d h:i:s'),
'first_name' => $firstName,
'last_name' => $lastName,
'email' => $email,
'auth_key' => $password,
'enabled' => '1',
'deleted' => '0');

$test = $this->db->insert_string('users', $data);

【讨论】:

    【解决方案2】:

    您似乎传递了错误的日期格式,MySQL 日期格式应该是 `YYYY-MM-DD HH:MM:SS,更新您的代码如下

    $data = array(
        'created_at' => date('Y-m-d H:i:s'),
        'updated_at' => date('Y-m-d H:i:s'),
        'first_name' => $firstName,
        'last_name' => $lastName,
        'email' => $email,
        'auth_key' => $password,
        'enabled' => '1',
        'deleted' => '0'
    );
    $this->db->insert('users', $data);
    return ($this->db->trans_status()) ? $this->db->insert_id() : false;
    

    确保在__construct 中加载数据库$this->load->database(); 并且created_atupdated_at mysql 列应该是DATETIME

    【讨论】:

      【解决方案3】:

      我终于可以使用了:

      $sql = sprintf("INSERT INTO users (created_at, updated_at, first_name, last_name, email, auth_key, enabled, deleted) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', %d, %d)", $data['created_at'], $data['updated_at'], $data['first_name'], $data['last_name'], $data['email'], $data['auth_key'], $data['enabled'], $data['deleted']);
      
      $this->db->query($sql);
      

      【讨论】:

      • @least 更正您的问题 - 因为根据您目前所展示的内容,您正在使用 CI 4
      猜你喜欢
      • 1970-01-01
      • 2014-05-04
      • 1970-01-01
      • 2015-08-04
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多