【问题标题】:MySql Script update on CodeIgniter [closed]CodeIgniter 上的 MySql 脚本更新 [关闭]
【发布时间】:2015-09-20 22:20:26
【问题描述】:

我无法将 MySQL 查询放入 php Codeigniter。我尝试搜索,但我还没有找到。

这是代码:

UPDATE `Pelayanan` SET `TGLBAYAR` = INSERT(`TGLBAYAR`, 3, 0, '/'), INSERT(`TGLBAYAR`, 6, 0, '/')
UPDATE `Pelayanan` SET `TGLRUBAH` = INSERT(`TGLRUBAH`, 3, 0, '/'), INSERT(`TGLRUBAH`, 6, 0, '/')
ALTER TABLE `Pelayanan` MODIFY COLUMN (`TGLBAYAR` DATE, `TGLRUBAH` DATE)

UPDATE `Pelayanan` SET `LAMA` = DATEDIFF(`TGLBAYAR`, `TGLRUBAH`)

我想按顺序运行这段代码,但我不知道是否使用 CASE 或其他东西。 controller.php 和 model.php 的代码如何?

【问题讨论】:

  • 你能再描述一下吗
  • 这些是有效的查询吗?如果您直接在 MySQL 数据库中运行这些查询,您会收到任何错误吗?

标签: php mysql codeigniter sql-update alter-table


【解决方案1】:

什么是

INSERT(TGLBAYAR, 3, 0, '/'), INSERT(TGLBAYAR, 6, 0, '/')

你能把它改成字符串吗?如果可以,请在您的模型上添加此函数并从 controller

调用它
 public function update_data(){
     $fields = array(
           'TGLBAYAR' => "INSERT(`TGLBAYAR`, 3, 0, '/'), INSERT(`TGLBAYAR`, 6, 0, '/')",
           'TGLRUBAH' => "INSERT(`TGLRUBAH`, 3, 0, '/'), INSERT(`TGLRUBAH`, 6, 0, '/')"
        );
     $this->db->update('Pelayanan', $fields, array());

     $fields = array(
          'TGLBAYAR' => array(
               'name' => 'TGLBAYAR',
               'type' => 'DATE',
          ),
          'TGLRUBAH' => array(
               'name' => 'TGLRUBAH',
               'type' => 'DATE',
          ),
      );
      $this->db->modify_column('Pelayanan', $fields);

     $fields = array(
           'LAMA' => "DATEDIFF(`TGLBAYAR`, `TGLRUBAH`)"
        );
     $this->db->update('Pelayanan', $fields, array());

 }

【讨论】:

  • TGLBAYAR 已经在字符串中 我已经运行了这段代码但仍然出现错误:“调用未定义的方法 CI_DB_mysqli_driver::modify_column()”
  • @user1213 你使用什么 CI 版本?尝试参考这个ellislab.com/codeigniter/user-guide/database/forge.html
  • 谢谢。我使用 Codeigniter 3.0.0。我想我应该迁移数据库来修复错误
  • 嗨,我可以看到你的控制器@user1213
【解决方案2】:

alter table 部分应如下所示:

$this->load->dbforge();

 $fields = array(
          'TGLBAYAR' => array(
               'name' => 'TGLBAYAR',
               'type' => 'DATE',
          ),
          'TGLRUBAH' => array(
               'name' => 'TGLRUBAH',
               'type' => 'DATE',
          ),
      );
 $this->dbforge->modify_column('Pelayanan', $fields);

另外,如果您有任何错误信息,请与我们分享。

【讨论】:

    【解决方案3】:

    无论你的查询是什么,只要把它放在函数 $this->db->query 中,它就会很容易执行,你可以根据需要正确理解它。我在下面为您的 mysql 查询放了一个示例:

    $query = $this->db->query(" UPDATE `Pelayanan` SET `TGLBAYAR` = 
    INSERT(`TGLBAYAR`, 3, 0, '/'), INSERT(`TGLBAYAR`, 6, 0, '/')
    UPDATE `Pelayanan` SET `TGLRUBAH` = INSERT(`TGLRUBAH`, 3, 0, '/'), 
    INSERT(`TGLRUBAH`, 6, 0, '/') ALTER TABLE `Pelayanan` MODIFY COLUMN 
    (`TGLBAYAR` DATE, `TGLRUBAH` DATE) UPDATE `Pelayanan` SET `LAMA` = 
    DATEDIFF(`TGLBAYAR`, `TGLRUBAH`) ");
    

    【讨论】:

      【解决方案4】:
      $this->db->set('TGLBAYAR', "INSERT(`TGLBAYAR`, 3, 0, '/')", FALSE);
      $this->db->set('TGLBAYAR', "INSERT(`TGLBAYAR`, 6, 0, '/')", FALSE);
      $this->db->set('TGLRUBAH', "INSERT(`TGLRUBAH`, 3, 0, '/')", FALSE);
      $this->db->set('TGLRUBAH', "INSERT(`TGLRUBAH`, 6, 0, '/')", FALSE);
      $this->db->update('Pelayanan');
      

      以上代码会将/ 替换为TGLBAYARTGLRUBAH 列。并期待更改您可以使用Codeigniter Migrations 的表格。当您进行实时部署时,这将是最佳实践并且更加灵活。

      $fields = array(
              'TGLBAYAR' => array(
                      'type' => 'DATE',
              ),
              'TGLRUBAH' => array(
                      'type' => 'DATE',
              ),
      );
      $this->dbforge->modify_column('Pelayanan', $fields);
      

      参考:https://codeigniter.com/user_guide/database/forge.html#modifying-a-column-in-a-table

      然后,

      $this->db->set('LAMA', "DATEDIFF(`TGLBAYAR`, `TGLRUBAH`)", FALSE);
      $this->db->update('Pelayanan');
      

      试试这段代码,如果发生任何错误,请告诉我。编码愉快。

      【讨论】:

        猜你喜欢
        • 2012-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-01
        相关资源
        最近更新 更多