【发布时间】:2017-09-19 12:04:29
【问题描述】:
我需要在 SQL Server 和我们的 CMS 中的记录之间编写同步。一切正常,但一些记录有奇怪的字符。
当我在 SQL Management Studio 中查找它们时,我可以看到值“Anselm Grün”。当我在 PHP PDO 中执行查询时,值为“NULL”
执行查询的PHP代码:
function getResultFromSqlServer($queryString){
$db = new PDO('odbc:Driver=ODBC Driver 11 for SQL Server; Server=****,1433; Database=Winbooks; UID=****; PWD=****');
$query = $db->query($queryString);
$result = array();
while ($row = $query->fetch()){
$result[] = $row;
}//while
return $result;
}//getResultFromSqlServer
查询:
SELECT name1 as 'Naam', insleep as 'Slapend',
c_webshop as 'Webshop', tr_groep as 'Groep',
tr_subgroe as 'Subgroep'
FROM art
WHERE (tr_subgroe LIKE '".$logisticsCode."%'
OR tr_groep LIKE '".$logisticsCode."%')
AND insleep = 0
ORDER BY name1
(我知道我应该使用准备好的语句,但这仅用于测试目的)
非常感谢!
【问题讨论】:
-
添加“charset=utf8;”到你的 PDO() 字符串?见stackoverflow.com/questions/25807202/…
-
我认为你在这里是在追逐野鹅。
NULL返回值通常意味着没有行符合您的条件。奇怪的字符可能会出现乱码,但通常不会产生 fetch 将返回NULL的效果。再说一次,您使用的是 ODBC,所以谁知道呢? -
也许问题不是很清楚。我得到了所有记录,但带有“ü”的值返回一个 NULL 值,但我得到了整个记录。
-
将您的查询简化为一个简单的测试用例(例如
SELECT "Anselm Grün"或SELECT name1 FROM art WHERE name1 LIKE "Anselm%")并包含示例输出(例如print_r($row)。) -
另外,您需要从带有参数的准备好的语句开始,否则您很容易受到 SQL 注入攻击。一行代码“仅用于测试”有什么区别?
标签: php sql-server pdo