SQLSRV PDO驱动程序为整数添加额外字符

时间:2013-05-28 20:58:31

标签: php sql-server iis-7 pdo sqlsrv

我正在安装 Windows Server 2008 R2 server with PHP5.4 and SQLSRV 上运行IIS7。

基本问题是,当我尝试检索某些值时,会在返回的值中添加额外/未知字符。

$options = array(PDO::SQLSRV_ATTR_ENCODING => PDO::SQLSRV_ENCODING_SYSTEM);
$this->db = new PDO("sqlsrv:server=$host;Database=$dbname",$user,$pass,$options);

$this->stmt =$this->connection->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED));
$this->stmt->execute();

$this->obj = $this->stmt->fetch(PDO::FETCH_OBJ)
$this->obj->$column;

其中$column是“ID”之类的内容。

当我对返回的值运行var_dump时,它会读出string(4) "455"。如果我将$ strB设置为"455", $strA == $strB,则评估为false ...

我在返回的值上尝试了iconv and utf8_decode,并设置了不同的PDO编码,但都没有成功。

数据库排序规则设置为SQL_Latin1_General_CP1_CI_AS。对此的任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

问题显然与设置光标有关...

$this->stmt =$this->connection->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED));

从options数组中删除光标设置后,未知字符就消失了。

答案 1 :(得分:0)

我这样做了:

$serverName = "mySrv";
$db = new PDO("sqlsrv:Server=mySrv;Database=AdventureWorks", "myUser","mypass");

$db->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_SYSTEM);                         
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

$tsql = "Select num from myTable";
$stmt = $db->prepare($tsql);

$stmt->execute();

$fun = $stmt->fetch();  

echo gettype($fun['num'])."<br>";
var_dump($fun['num']);

结果:

integer
int(496)