gpt4 book ai didi

php - 使用带有 dblib 驱动程序的 PDO 从 Microsoft Azure Transact SQL 获取数据时出现问号而不是俄语字符

转载 作者:行者123 更新时间:2023-12-03 05:56:09 24 4
gpt4 key购买 nike

我正在尝试从 PHP 连接 Microsoft Azure SQL Server。目前 Ubuntu 14.04 上的 PHP 5.5.9

一切正常,直到我将服务器升级到 16.04 和 PHP 7。自该更新以来,前面带有“N”个字符的 unicode 字符串停止工作。当我从准备好的语句中删除“N”时,它开始正常运行,而不是一件事:当我用俄语符号插入或更新时,它们被存储为中文。

明天我尝试了很多不同的方法来解决这个问题。最后我决定回滚到 Ubuntu 14.04。但令我惊讶的是我得到了同样的效果。

这是我的连接字符串:

$connection = new PDO ("dblib:version=7.0;charset=UTF-8;host=".AZURE_SQL_HOST.":".AZURE_SQL_PORT.";dbname=".AZURE_SQL_DB, AZURE_SQL_USER, AZURE_SQL_PASS);

我不知道我应该提供什么信息。有人可以指导我吗?

提前致谢!

更新:我不知道到底发生了什么,但不知怎的,我开​​始收到问号。看来中文字符问题只出现在 php7 上。

现在我无法摆脱这个问号。

最佳答案

终于把一切都整理好了:

  1. 中文符号仅出现在 PHP7 中。在 php7 中,我无法以任何方式使用“N”个字符制作 PDO 准备语句。
  2. 当我围绕 php7 跳舞时,我切换到命名集传递变量风格。这就是问题的根源。似乎命名 (:name) 参数不适用于“N”,而问号 (?) 参数可以。

这样就可以了:

$statement = $pdo->prepare("SELECT * FROM some_table WHERE some_field=?");
$statement->execute(['SOME_UNICODE_CHARS']);

这不是:

$statement = $pdo->prepare("SELECT * FROM some_table WHERE some_field=:field");
$statement->execute([':field' => 'SOME_UNICODE_CHARS']);

希望这可以节省一些人的时间......

关于php - 使用带有 dblib 驱动程序的 PDO 从 Microsoft Azure Transact SQL 获取数据时出现问号而不是俄语字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41344622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com