复制脚本
$dbh = new \PDO("dblib:host=xxx;dbname=test;charset=utf8","test","test");
$str1 = '䏿æµè¯';
// Snippet 1: With parameter binding
$sql = "INSERT INTO TEST (text) VALUES (:text)";
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':text',$str1); // or $stmt->bindParam(':text',$str1,PDO::PARAM_STR);
$stmt->execute();
// Snippet 2: Text in SQL
$sql = "INSERT INTO TEST (text) VALUES ('".$str1."')";
$dbh->exec($sql);
问题描述
在PHP7中,
对于代码片段1,字符在数据库中被损坏(Mojibake)。
对于代码片段2,一切正常。
在PHP5.5中,两个代码片段都按预期工作。
我们在将PHP 5.5升级到PHP 7时发现了这一点。
所以问题是为什么代码片段1在PHP7设置中不工作?
其他信息
Ubuntu: Linux 3.19.0-25-generic #26~14.04.1-Ubuntu
PHP (from APT): 7.0.8-0ubuntu0.16.04.2
with builtin pdo_dblib: 7.0.8-0ubuntu0.16.04.2
freetds (from APT): 0.91-6.1build1
良好的设置(PHP5.5)
Ubuntu: Linux 3.19.0-25-generic #26~14.04.1-Ubuntu
php (from APT): 5.5.9-1ubuntu4.14
with builtin pdo_dblib: 1.0.1
freetds (from APT): 0.91-5
两种设置中的freetds配置
/etc/freetds.config (both PHP 5.5 and 7 installation)
-------
tds version = 8.0