我正在安装 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
。对此的任何帮助将不胜感激!
答案 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)