1

我在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评估为假...

我试过iconv and utf8_decode返回值,以及设置不同的PDO编码,都没有成功。

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

4

2 回答 2

0

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

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

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

于 2013-06-04T13:48:15.910 回答
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)
于 2016-07-26T21:11:26.493 回答