【问题标题】:SQL Server values with weird characters returns NULL带有奇怪字符的 SQL Server 值返回 NULL
【发布时间】: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


【解决方案1】:

尝试使用 unicode 搜索

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 N'".$logisticsCode."%' 
       OR tr_groep LIKE N'".$logisticsCode."%') 
      AND insleep = 0 
ORDER BY name1

【讨论】:

  • 也不起作用。我仍然得到记录,但是包含 ü 的列是空的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 2017-07-04
  • 2018-03-11
  • 2019-07-27
  • 1970-01-01
相关资源
最近更新 更多