在下版本之前的插件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] 是返回错误信息
|