php7版本安装微软的驱动后,安装扩展pdo_sqlsrv即可.低版本使用dblib扩展
Centos7下LNMP,Php7.3连接sqlserver
访问后还是出现一样的错误:could not find driver
安装 ODBC ,https://www.microsoft.com/zh-CN/download/details.aspx?id=36434,下载后安装即可
重启 php 后,继续访问,还是出现一样错误。
安装 Visual C++ 运行库,http://www.downza.cn/soft/211494.html
微软驱动: https://docs.microsoft.com/en-us/sql/connect/php/download-drivers-php-sql-server?view=sql-server-ver15
扩展下载地址,我下载的是5.6.1 stable版本
http://pecl.php.net/package/pdo_sqlsrv
目前还没有验证直接下载扩展安装成功的必要条件是不是已经让之前的很多操作实现了.
以上地址中含有dll文件,在win下我没有测试,我是根据以下方式安装成功的.
Win10 下连接sqlserver
我是按着网上的说明,根据如下图所示找到对应版本后安装成功的,具体参考
https://blog.csdn.net/JiangName/article/details/80484382
微软的yum源: curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssqlrelease.repo
防止冲突卸载原有驱动: yum remove unixODBC
安装驱动: yum install msodbcsql mssql-tools unixODBC-devel
LAMP环境下,PHP5.6连接SqlServer方法如下
首先安装 FreeTDS,再安装pdo_dblib扩展,否则报错
# wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-patched.tar.gz
# tar -zxvf freetds-patched.tar.gz
# cd freetds-1.00.48/
# ./configure --prefix=/usr/local/freetds --with-tdsver=7.3 --enable-msdblib
# make && make install
安装pdo_dblib扩展,没有源码可查看php版本后去官网下载同版本php即可
pdo连接数据库时中文乱码,一定要指定utf-8,如下
$mssql = new PDO('dblib:host=10.0.6.218;dbname=UFDATA_001_2018;charset=UTF8', "sa","abc@123");
if( !$mssql ){
die("连接错误啦!".mssql_error()).'
';
}else{
echo "连接成功了!
";
}
$sql = "SELECT * from AA_Agreement";
$res = $mssql->prepare($sql);
$res->execute();
while ($row = $res->fetch()) {
echo "";
print_r($row);
echo "
";
}
unset($mssql);
unset($res);
mssql_close($mssql);
dblib和odbc等这些扩展是依赖pdo.so的,所以必须在引入pdo.so之后才能引入
extension=pdo_dblib.so
extension=pdo_odbc.so
于是找到php.d/pdo.ini将这两个模块的引入放到pdo.so的后面即可(我的机器是在/etc目录下)
php代码如下
exec($sql);
}
catch(Exception $e)
{
$msg = $e->getMessage();
$fruit = false;
}
if(self::SQL_SERVER2008_DEBUG && self::SQL_SERVER2008_DEBUG == true)
{
self::err($sql);
self::err('-----------------------------------------');
self::err(self::$pdo->errorInfo());
}
return $fruit;
}
public function insert($sql,&$msg=null)
{
if($this->execute($sql,$msg))
{
return $this->getLastId();
}
return false;
}
public function getList($sql,&$msg=null)
{
$fruit = array();
$sth = self::$pdo->prepare($sql);
$sth->execute();
while ($row = $sth->fetch(PDO::FETCH_ASSOC))//返回一个关联数组PDO::FETCH_ASSOC
{
$fruit[] = $row;
}
return $fruit;
}
public function getRow($sql,&$msg=null)
{
$result = $this->getList($sql,$msg);
if(!empty($result) && !empty($result[0]))
{
return $result[0];
}
$msg = 'The result is empty';
return array();
}
public function arr2insertsql($data,$table_name='')
{
$fields = implode(',',array_keys($data));
$values = implode('\',\'',$data);
$sql = 'INSERT INTO '.$table_name.'('.$fields.') VALUES (\''.$values.'\');';
return $sql;
}
public function getLastId()
{
$sql = "select @@identity as id ;";
$result = $this->getRow($sql);
if($result && $result['id'])
{
return $result['id'];
}
return false;
}
public static function err($data = '',$pr='info')
{
error_log(date('Y-m-d H:i:s').' '.$pr.' : '.var_export($data,1).PHP_EOL,3,'/tmp/zzz.sqlserver2008.'.$pr.'.'.date('Y-m-d').'.logs');
}
/**
* 创建用户,直接调用该存储过程
* @param null $name
* @return string 成功后的用户ID
*/
public function callCreateUser($name = null)
{
$sql = <<prepare($sql);
$sth->execute();
$result = $sth->fetchColumn();
return $result;
}
/**
* 创建多人会话,直接调用该存储过程
* @param null $master
* @param array $members
* @return string 成功后的会话ID
*/
public function callCreateTempGroup($master = null,$members = array())
{
$users = implode(',',$members);
$sql = <<prepare($sql);
$sth->execute();
$result = $sth->fetchColumn();
return $result;
}
/**
* 创建群组,直接调用该存储过程
* @param null $master
* @param null $name
* @return string 成功后的群组ID
*/
public function callCreateGroup($master = null,$name = null)
{
$sql = <<prepare($sql);
$sth->execute();
$result = $sth->fetchColumn();
return $result;
}
}
$db = new Dblib();
$sql = "SELECT top 1 * FROM Users;";
var_dump($db->getList($sql));