盒子
盒子
文章目录
  1. SQLSERVER
    1. PHP with sqlserver
  2. Oracle
    1. Oracle 使用
    2. PHP with Oracle
  3. 写在最后
    1. 参考链接

Yii2和sqlserver2014以及oracle的故事

没怎么用过SQLSERVER和Oracle,但是又有奇怪的需求要实现在一台电脑上同时安装三种数据库,并查询其中数据,无奈只好倒腾一下
由于sqlserver要装在windows机器上,所以我打算把这三个系统都装在server2008上,装起来感觉也简单点。

SQLSERVER

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做点测试

PHP with sqlserver

我在Yii2的数据库配置页看到了下面针对SQLServer的三种配置,也不知道哪个好,只有一个一个了解下了

1
2
3
//'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,网上看了很多,基本说的要装的如下:

1
sudo apt-get install php5-sybase php5-odbc unixodbc tdsodbc freetds-common freetds-bin

安装完成后可运行命令查看FreeTDS安装状况

1
2
tsql -H 192.168.32.77 -p 1433 -U sa -D test   #测试连接
tsql -C #查看配置

修改配置文件,我用的是xampp,路径为:/opt/lampp/etc/freetds.conf,默认路径是/etc/freetds/freetds.conf
添加配置

1
2
3
4
[mymssql]
host = 192.168.32.77
port = 1433
tds version = 7.0

然后测试代码如下,测试成功。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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-sybasefreetds-bin就可以连接了。
我先在自己的笔记本上倒腾,笔记本用的XAMPP,怎么装上面那段测试代码可以连接mssql,但是phpinfo里面就是没有pdodblib,然后我重新装了虚拟机,不用套件,一个个装apache2、mysql、php。装好之后又安装php5-sybasefreetds-bin。然后神奇的事情发生了,全都好了。截图如下,如果你装好后,phpinfo()中也包含这些内容就说明成功了
<img src=”https://img.alicdn.com/imgextra/i1/192713264/TB2Hx2KkVXXXXamXXXXXXXXXXXX
!!192713264.png” alt=” mssql.png”/>
 pdo.png

下面使用PDO方式的连接,我们最终目标是使用YII2框架嘛,直接给出测试代码:
数据库配置:

1
2
3
4
5
6
7
'msdb' => [
'class' => 'yii\db\Connection',
'dsn' => 'dblib:host=192.168.32.77:1433;dbname=test',
'username' => 'sa',
'password' => '123',
'charset' => 'utf8',
],

测试代码:

1
2
3
4
5
$connection = \Yii::$app->msdb;
$connection->open();
$command = $connection->createCommand('SELECT * FROM testtable');
$posts = $command->queryAll();
var_dump($posts);

Oracle

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 使用

Oracle还是有点复杂,这里简单写几个SQL语句,备忘

1
2
3
alter user scott account lock;
alter user scott account unlock;
alter user scott identified by grace;

PHP with Oracle

下面我们开始安装oci8扩展,我们使用pecl进行安装,如果你安装不了,那就只有下载相应的软件包编译安装了,首先需要安装一些编译安装所需的软件,build-essential提供编译C的一些工具,php5-dev提供phpize等一些工具,至于php-pear就是pecl命令所需的包。

1
2
sudo apt-get install build-essential
sudo apt-get install php5-dev php-pear

然后使用pecl安装,这里要注意不能直接使用pecl install oci8,因为这样是直接给php7安装扩展的,我们是5.4安装方法如下:

1
pecl install oci8-2.0.10  #PHP 5.2 - PHP 5.6

然后在php.ini中添加extension=oci8.so
再一次访问phpinfo()可以看到如下内容则安装成功。
 oci.png
然后我们可以使用代码测试下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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搞,搞不定。网上的文章各种抄,各种过期的东西,真是日了狗,鄙视一切胡乱抄写,胡乱转载的行为

参考链接