在SQL构造器开头有那么一句话,复杂的SQL还的编写原生SQL,本章就是来介绍怎样执行原生SQL。

在查询一章已经介绍了如何用原生SQL进行查询。本章所说的原生SQL以执行 insert,update,delete和数据库操作SQL语句为主。

query()

参数说明备注$sqlSQL语句必填$param插入占位符绑定的内容数组非必填。若使用了占位符则必填$fieldType字段类型绑定,与占位符长度一致的数组非必填。字段绑定具体请参阅PHP官网

对于执行insert,update,delete的原生的SQL,PESCMS提供了 query() 方法。用法非常简单,现在我们要更新用户ID为1的密码。具体实现代码如下:

  1. <?php
  2. $this->db()->query('UPDATE pes_user SET user_passwd = "bdjhgf12yu3" WHERE user_id = "2"')//执行成功,将返回影响行数

query() 方法返回的数据优先度: 1.先判断能否返回最后的自增ID 2.前者非insert或者没有自增属性,则返回影响行数

alter()

参数说明备注$sqlSQL语句必填$param插入占位符绑定的内容数组非必填。若使用了占位符则必填$fieldType字段类型绑定,与占位符长度一致的数组非必填。字段绑定具体请参阅PHP官网

除了增删改SQL语句外,我们还可能会操作ALTER语句对数据库、表进行调整。对于这种情况,PESCMS提供了alter() 方法:

  1. <?php
  2. $this->db()->alter("ALTER TABLE `{$this->prefix}field` CHANGE `field_default` `field_default` VARCHAR(129) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;")

执行ALTER语句其实可以用query() 方法。两者其实差异不大,但我觉得两者其区分执行不同的方法,以后问题可以直接搜索相关执行的方法,就可以定位问题了。

ALTER大部分语句都不能使用PDO的预处理,因此请确保连接数据库的帐号和尽量不在程序执行ALTER动作。