最近一个项目,需要用php连接mssql。以前一直是用php连接mysql,对于php连接mssql不够了解。经过项目,总结一些经验。
1、配置php连接mssql。
对于连接mssql2005,需要在下载微软提供的驱动。sqlsrv3.0,解压到php的目录下,然后在php.ini的目录中设置。
[PHP_PDO_SQLSRV]
extension=php_pdo_sqlsrv_54_nts.dll
[PHP_SQLSRV]
extension=php_sqlsrv_54_nts.dll
2、连接代码。
$conInfo=array('Database'=>$dbname,'UID'=>$dbuser,'PWD'=>$dbpw,'CharacterSet' => 'UTF-8');
$link=sqlsrv_connect($dbhost,$conInfo);
if(!$this->connid = sqlsrv_connect($dbhost,$conInfo))
{
if( ($errors = sqlsrv_errors() ) != null) {
print_r($error);
}
}
3、取得自增长id的方法。
$query = sqlsrv_query($this->connid,$sql) ;//or $this->halt('MsSQL Query Error', $sql)
if( $query === false ) {
die( print_r( sqlsrv_errors(), true));
}
$r=sqlsrv_query($this->connid,"SELECT @@identity as insertid;");
$rs = $this->fetch_array($r);
$this->insertid = $rs['insertid'];
4、上传附件,存入数据库的image字段。
$c = file_get_contents($_FILES["file"]["tmp_name"]);
$content = "0x";
for ($i=0; $i<strlen($c); $i++) {
$h = dechex(ord($c[$i]));
if (strlen($h)<2) $h = '0'.$h;
$content .= $h;
}
$filetruename = $_FILES["file"]["name"];
//将数据保存,并处理
//存储图像到数据库
$sql = "insert into aaa(id,ImgContent) values('".$ext."',".$content.")";
$db->query($sql);
注意,这里content不需要加单引号,ox开头,说明是二进制文件。
5、关于mssql中保存汉字失败,或者读取乱码。
保存到数据库,提示utf16转换失败。
在保存前,进行转码。
$ext = iconv('utf-8', 'GB2312//IGNORE', $ext);
读出时,也同样进行相反的转码。
$ext = iconv("GB2312",''utf-8//IGNORE', $ext);
或者,在连接数据库时,直接指明语言编码。
$conInfo=array('Database'=>$dbname,'UID'=>$dbuser,'PWD'=>$dbpw,'CharacterSet' => 'UTF-8');
$link=sqlsrv_connect($dbhost,$conInfo);