首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PDO和dblib驱动程序从Microsoft Azure Transact SQL获取数据时使用问号而不是俄文字符

使用PDO和dblib驱动程序从Microsoft Azure Transact SQL获取数据时使用问号而不是俄文字符
EN

Stack Overflow用户
提问于 2016-12-27 11:48:31
回答 1查看 169关注 0票数 0

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

在我将服务器升级到16.04和PHP 7之前,一切都进行得很好,因为在unicode字符串前面加上'N‘字符的更新停止了工作。当我从准备好的语句中删除‘N’时,它开始正常工作,而不是一件事:当我用俄语符号插入或更新时,它们被存储为中文。

我明天尝试了很多不同的事情来解决这个问题。最后,我决定回Ubuntu14.04。但令我惊讶的是我也得到了同样的效果。

以下是我的连接字符串:

代码语言:javascript
复制
$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有关。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-27 15:02:07

最终解决了所有的问题:

  1. 中国符号只发生在PHP7。在php7中,我无法以任何方式让PDO准备带有'N‘字符的语句。
  2. 当我在php7周围跳舞时,我切换到了命名集传递变量风格。这就是问题的根源。看起来名字(:name)参数不适用于'N‘和问号(?)参数是可以的。

这样就行了:

代码语言:javascript
复制
$statement = $pdo->prepare("SELECT * FROM some_table WHERE some_field=?");
$statement->execute(['SOME_UNICODE_CHARS']);

而这并不是:

代码语言:javascript
复制
$statement = $pdo->prepare("SELECT * FROM some_table WHERE some_field=:field");
$statement->execute([':field' => 'SOME_UNICODE_CHARS']);

希望这能节省一些时间..。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41344622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档