没怎么用过SQLSERVER和Oracle,但是又有奇怪的需求要实现在一台电脑上同时安装三种数据库,并查询其中数据,无奈只好倒腾一下由于sqlserver要装在windows机器上,所以我打算把这三个系统都装在server2008上,装起来感觉也简单点。
sqlserver相对我还倒腾的多一点,那么就先从sqlserver讲起,sqlserver我安装的sqlserver2014 Express版本,好像这个版本是免费的,下了一个,然后就是一路默认安装,完了发现连个管理工具都没有,于是又装了个navicat,用navicat去连接sqlserver的时候,发现连接不了,错误提示为什么管道什么的没打开,直觉告诉我一定是哪里需要配置下开启sqlserver外连
找了一下安装产生的各种工具,发现开始菜单里面有一个配置工具,目录里面有一个SQL Server 2014配置管理器,点进去有一个SQL Server网络配置,然后点进去把Named Pipes和TCP/IP两个都启用,再次用navicat连接,就成功了。
然后还要开启防火墙允许对SQL Server的访问,这个方法官网就有, 链接在此 .aspx)
下面就开始倒腾php查询mssql,然后打算用yii2做点测试
我在Yii2的数据库配置页看到了下面针对SQLServer的三种配置,也不知道哪个好,只有一个一个了解下了
//'dsn' => 'sqlsrv:Server=localhost;Database=mydatabase', // MS SQL Server, sqlsrv driver
//'dsn' => 'dblib:host=localhost;dbname=mydatabase', // MS SQL Server, dblib driver
//'dsn' => 'mssql:host=localhost;dbname=mydatabase', // MS SQL Server, mssql driver
查阅资料的过程中发现这个网站介绍挺好的-> 地址
上面的第一个windows下的一个驱动,我倒腾了好久都没成功,十分受伤,刚开始是自己的wamp中的php版本过低,没有支持的相应的sqlsrv的dll文件,然后我又把我的wamp升级到最新,配置相应的dll然后查看phpinfo,phpinfo中没有丝毫反映,网上还说啥只支持32位php,不支持64位的,倒腾好久放弃,试试别的方案。
第二个驱动支持linux,而我又比较喜欢在linux下开发,我们需要安装FreeTDS,网上看了很多,基本说的要装的如下:
sudo apt-get install php5-sybase php5-odbc unixodbc tdsodbc freetds-common freetds-bin
安装完成后可运行命令查看FreeTDS安装状况
tsql -H 192.168.32.77 -p 1433 -U sa -D test #测试连接
tsql -C #查看配置
修改配置文件,我用的是xampp,路径为: /opt/lampp/etc/freetds.conf
,默认路径是 /etc/freetds/freetds.conf
添加配置
[mymssql]
host = 192.168.32.77
port = 1433
tds version = 7.0
然后测试代码如下,测试成功。
<?php
$server = 'mymssql';
$username = 'sa';
$password = '123';
$database = 'test';
$connection = mssql_connect($server, $username, $password);
if($connection != FALSE){
echo "Connected to the database server OK<br />";
}else{
die("Couldn't connect");
}
if(mssql_select_db($database, $connection)){
echo "Selected $database ok<br />";
}else{
die('Failed to select DB');
}
$query_result = mssql_query('SELECT @@VERSION');
$row = mssql_fetch_array($query_result);
if($row != FALSE){
echo "Version is {$row[0]}<br />";
}
mssql_free_result($query_result);
mssql_close($connection);
?>
实际测试时,我发现只要安装 php5-sybase
和 freetds-bin
就可以连接了。
dblib,然后我重新装了虚拟机,不用套件,一个个装apache2、mysql、php。装好之后又安装 php5-sybase
和 freetds-bin
。然后神奇的事情发生了,全都好了。截图如下,如果你装好后, phpinfo()
中也包含这些内容就说明成功了
下面使用PDO方式的连接,我们最终目标是使用YII2框架嘛,直接给出测试代码:
数据库配置:
'msdb' => [
'class' => 'yii/db/Connection',
'dsn' => 'dblib:host=192.168.32.77:1433;dbname=test',
'username' => 'sa',
'password' => '123',
'charset' => 'utf8',
],
测试代码:
$connection = /Yii::$app->msdb;
$connection->open();
$command = $connection->createCommand('SELECT * FROM testtable');
$posts = $command->queryAll();
var_dump($posts);
oracle的下载页面-> 请猛戳 ,我下载的版本是11g第二版
同样的我们需要配置才能用php连接,并操作。我们需要下载配置oracle instant client来连接,下载地址: Oracle Database Instant Client
下载对应版本的instantclient,有两个文件,一个是basic包,一个是SDK包,我下的文件名分别是:instantclient-basic-linux.x64-12.1.0.2.0.zip,instantclient-sdk-linux.x64-12.1.0.2.0.zip。如果你是centos系统,也可以直接下载相应的rpm包直接安装。rpm安装的路径为:
/usr/lib/oracle/12.1/client64/lib/
,我们也将上面两个文件在相同目录下解压,SDK压缩包的内容或解压到basic的子目录下,我们把解压的内容复制到上面的目录中,rpm安装,还会把一些头文件放置到 /usr/include/oracle/12.1/client64/
中,我们也把sdk下面的子目录里面的头文件拷贝到对应的目录,至此instantclient就安装完成了。
Oracle还是有点复杂,这里简单写几个SQL语句,备忘
alter user scott account lock;
alter user scott account unlock;
alter user scott identified by grace;
下面我们开始安装oci8扩展,我们使用pecl进行安装,如果你安装不了,那就只有下载相应的软件包编译安装了,首先需要安装一些编译安装所需的软件,build-essential提供编译C的一些工具,php5-dev提供phpize等一些工具,至于php-pear就是pecl命令所需的包。
sudo apt-get install build-essential
sudo apt-get install php5-dev php-pear
然后使用pecl安装,这里要注意不能直接使用 pecl install oci8
,因为这样是直接给php7安装扩展的,我们是5.4安装方法如下:
pecl install oci8-2.0.10 #PHP 5.2 - PHP 5.6
extension=oci8.so
再一次访问 phpinfo()
可以看到如下内容则安装成功。
然后我们可以使用代码测试下:
<?php
// Create connection to Oracle
$conn = oci_connect("system", "test", "//192.168.32.77/orcl.test.com");
if (!$conn) {
$m = oci_error();
echo $m['message'], "/n";
exit;
}
else {
print "Connected to Oracle!";
}
// Close the Oracle connection
oci_close($conn);
?>
至于Yii2下直接有这么一个扩展, yii2-osi8pdo ,扩展的使用不在本文的范围内。
妈蛋的,受不了了,安个mssql的扩展windows搞,搞不定。linux搞,搞不定。网上的文章各种抄,各种过期的东西,真是日了狗,鄙视一切胡乱抄写,胡乱转载的行为