帖子菜单

插件SQL 安装卸载函数新规范

admin 2017-10-9

在下版本之前的插件SQL安装功能一直都没进行规范. 

在这里做一下规范说明, 并应用到下一个版本 2.0.20 程序中.

先列出代码 以QQ登陆安装函数作为例子

<?php
//插件安装时 执行的安装函数
function plugin_install(){
    $sql = S("Plugin");
    $result = $sql->query("
    -- 创建QQ用户表 `hy_qqlogin`
    CREATE TABLE if not exists `hy_qqlogin` (
      `openid` varchar(32) NOT NULL,
      `uid` int(11) NOT NULL DEFAULT '0',
      UNIQUE KEY `uid` (`uid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    "); //执行SQL语句
    
    if($result->errorCode() != 0) //执行失败
        return $result->errorInfo()[2]; //返回错误原因
    return true; //执行成功
} 
//插件卸载时 执行的安装函数
function plugin_uninstall(){
    $sql = S("Plugin");
    $result = $sql->query("DROP TABLE `hy_qqlogin`;"); //执行SQL语句
    
    if($result->errorCode() != 0){ //执行失败
        return $result->errorInfo()[2]; //返回错误原因
    }
    return true; //执行成功
}

当用户安装插件时触发 plugin_install 称为安装函数

安装函数下执行一些文件或数据库操作

以往的数据库操作 都没有做一个很好的 执行成功失败的识别 以及执行失败的错误反馈

对此在这里做了调整

$result = $sql->query(执行SQL)

query会返回PDO的PDOStatement对象

通过 $result->errorCode() 返回这条query是否失败 并返回具体错误代码

也可以通过 $result->errorInfo()[0] 返回Code代码

上面代码示例中 提到 return $result->errorInfo()[2];

errorInfo[2] 则是执行错误信息


补充一点 如果你不需要返回错误原因 可以直接return false.

再补充一点 

PDOStatement 类

errorCode 其实返回的是string类型 如果没有执行错误 则会返回 00000 , 所以你也可以这样判断 errorCode() == 0 或 errorCode() == '00000' 都是一样的!

errorInfo 返回都是数组 他包含了错误代码以及错误信息

所以你可以在上面的代码看到 errorInfo[2] 是返回错误信息

 


chilsion

# 1楼 2017-10-9 点评

支持有规范!

chilsion

# 2楼 2017-10-9 点评

支持有规范

踩 (1)
赞 (0)
查看 (4597)
登陆后才可发表内容