由于项目需要,需要用到oracle,由于本人对于java不熟悉所以只能用thinkphp+oracle,thinkphp版本是5.1.25最新版本,安装这个oracle由于不支持pdo导致我弄了两天,
oracle的下载地址我就不提供了,大家都比我熟悉,
我在phpstudy下面安装就是不行就是有问题,最后下载了一个Wampserver64
配置成功,需要注意的是:
1.安装好wamoserver64一定要看看自己的php版本,默认是64位的,phpstudy是32位的,如果PHP版本和驱动对应不上,就会出现cloud not find driver 类似的错误
2.安装oracle驱动http://pecl.php.net/package/oci8 这里面的驱动根据自己的oracle版本开启,你也可以去全部开启,我里面有这么多,我用的是11G,我开启了全部,不过是否开启全部都无所谓的,开启你对应的oracle版本即可,不过php_pdo_oci.dll这个必须是开启的否则还是找不到驱动,如果php.ini里面找不到的直接添加上就行了,很多教程不说这个,php.ini没有的你可以添加上
extension=php_oci8_12c.dll
extension=php_pdo_oci.dll
extension=php_oci8.dll
extension=php_oci8_11g.dll
3.你看看phpinfo里面的pdo选项是否有mysql,sqlite oci,如果没有oci证明驱动没有安装上去,如下图所示

4.安装完毕下载thinkphp-oracle,下载最新版本thinkphp,如果是tp 最好使用v2.x,否则可能还是找不到驱动,这个切记,下载地址https://github.com/top-think/think-oracle/releases,不过我建议直接通过composer安装 composer require topthink/think-oracle=v2.1 安装最新版本即可
5.安装之后我们剩下的就是配置数据库了,配置数据库我把我的配置截图发给你们,下面就是配置的截图,

数据库配置完毕之后,
我们写一个方法进行测试(Db::name表是不带前缀的别搞错了,引用的时候一定use think\Db; 如果怕出错可以直接使用Db::table()完整表名,我是小白,我就怕有人犯错误,所以就提醒一句,不要嫌弃我啰嗦)
DB::name('table')->select();正常
DB::name('table')->where("条件")->update($data);正常
DB::name('table')->where("条件")->delete();正常
DB::name('table')->insert($data);提示错误
解决方案。插入出错最后看了一下, 貌似是驱动不支持,最后找到问题是
vendor\topthink\think-oracle\src\Connection.php一个地方有错误,目前没有办法只能修改,等待官方更新最新版本,如果官方更新还是用官方的,目前需要改一下getLastInsID这个方法貌似在96到100行之间
如下图

下面是附件,如果是v2.1版本可以直接替换(注意做好备份),如果以后官方升级可以直接进行升级,感觉官方提供的优秀框架
public function getLastInsID($sequence = null)
{
try {
$lastInsID = $this->linkID->lastInsertId();
} catch (\PDOException $e) {
//对于驱动不支持PDO::lastInsertId()的情况感谢 lengxin337提供的参考
try {
$lastInsID = 0;
$seqPrefix = $this->sequence_prefix ? $this->sequence_prefix : '_seq';
$sequence = $sequence ? $sequence : $this->table . $seqPrefix;
$q = $this->query("SELECT {$sequence}.CURRVAL as t FROM DUAL"); //获取当前序列号
if ($q) {
$lastInsID = $q[0]['t'];
}
} catch (\Exception $e) {
return $e->getMessage();
}
}
return $lastInsID;
}祝大家国庆快乐
Connection.rar
( 1.64 KB 下载:166 次 )
最佳答案