首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDO FreeTDS误差

PDO FreeTDS误差
EN

Stack Overflow用户
提问于 2010-10-11 15:31:18
回答 1查看 1.1K关注 0票数 2

我刚刚将服务器从php5.2升级到5.3.3,在PDO (使用DBLIB)中出现了一个奇怪的错误。

我正在连接到Server 2005。在任何以"N“字母作为参数前缀的语句(告诉Server它是unicode字符串)中,都会出现错误。

该查询如下所示:

代码语言:javascript
复制
INSERT INTO IPs (IP, PosterId, Note, DateAdded, Status, IsClass)
VALUES (:ip, :posterid, N:note, GETUTCDATE(), :status, :isclass)

用于在旧设置上正常工作的新设置引发异常:

SQLSTATEHY093:无效的参数号:绑定变量的数目不匹配令牌的数目

如果我移除参数前面的N个字符,似乎工作正常。然而,我有成千上万的这样的声明,这将是一个痛苦的删除。我宁愿找出发生这种情况的原因并加以修正。

知道该怎么做吗?

谢谢

稍后编辑:由于仍然站在下面,我发现使用未命名的参数(问号)是有效的。但这还是让我改变了很多陈述。

因此,这是可行的:

代码语言:javascript
复制
INSERT INTO IPs (IP, PosterId, Note, DateAdded, Status, IsClass)
VALUES (?, ?, N?, GETUTCDATE(), ?, ?)
EN

回答 1

Stack Overflow用户

发布于 2011-11-26 08:12:37

插入ip (IP、posterid、note、DateAdded、status、IsClass)值(:ip,:posterid,N:note,GETUTCDATE(),:status,:isclass)

首先,当您使用准备好的语句时,PDO通常看起来是这样的。$stm->bindParam(':note',$note);$stm->execute();

当PDO查看这个参数时,它通常会通过一个安全的插入解析器(如mysql_escape_string() )运行您的参数,并将单引号放在您的值周围,所以.注通常在插入标记时,它们完全独立于任何其他特殊字符,并填充空格或制表符。您可能会考虑避免使用命名参数,这可能会有所帮助,但是,如果不告诉PDO这是一个整数值,它将避免在插入时使用单引号,那么插入N‘’somevalue‘似乎是不寻常的。

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

https://stackoverflow.com/questions/3907662

复制
相关文章

相似问题

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