PHP5.3在Linux下不支持mssql,pdo_mssql_sqlsrv扩展,我们在连接sql server的时候我选择了pdo_odbc扩展去连接,遇到了以下问题和需要注意的。
PHP :5.3 Freetds : freetds-0.91.112 unixODBC: unixODBC-2.3.2
参阅:http://www.moell.cn/article/6
1. 字符集编码问题 如果你的程序是GBK,sql server是Chinese_PRC_CI_AS,PDO_ODBC返回的字符集和unixODBC有关,默认返回UTF-8,所以注意转换。
2. PDO预处理问题 PDO无法使用预处理绑定参数。
错误实例
/**
* @param $status
* @return mixed
*/
private function getSynStatus($type)
{
$sql = "select top 1 * from I_SYN WHERE FNote = :type";
$statment = $this->pdo->prepare($sql);
$statment->execute(array(":type" => $type)); //注意这里
$status = $statment->fetch(PDO::FETCH_ASSOC);
return $status['FStatus'];
}
报错信息 PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 402 [FreeTDS][SQL Server]The data types nvarchar and text are incompatible in the equal to operator. (SQLExecute[402]
解决办法:不使用预处理
/**
* @param $status
* @return mixed
*/
private function getSynStatus($type)
{
$sql = "select top 1 * from I_SYN WHERE FCate = '".$type."'";
$statment = $this->pdo->query($sql);
$status = $statment->fetch(PDO::FETCH_ASSOC);
return $status['FStatus'];
}
PHP在linux下不到万不得已,不要使用php 与 sql server交互。