我刚刚将服务器从php5.2升级到5.3.3,在PDO (使用DBLIB)中出现了一个奇怪的错误。
我正在连接到Server 2005。在任何以"N“字母作为参数前缀的语句(告诉Server它是unicode字符串)中,都会出现错误。
该查询如下所示:
INSERT INTO IPs (IP, PosterId, Note, DateAdded, Status, IsClass)
VALUES (:ip, :posterid, N:note, GETUTCDATE(), :status, :isclass)用于在旧设置上正常工作的新设置引发异常:
SQLSTATEHY093:无效的参数号:绑定变量的数目不匹配令牌的数目
如果我移除参数前面的N个字符,似乎工作正常。然而,我有成千上万的这样的声明,这将是一个痛苦的删除。我宁愿找出发生这种情况的原因并加以修正。
知道该怎么做吗?
谢谢
稍后编辑:由于仍然站在下面,我发现使用未命名的参数(问号)是有效的。但这还是让我改变了很多陈述。
因此,这是可行的:
INSERT INTO IPs (IP, PosterId, Note, DateAdded, Status, IsClass)
VALUES (?, ?, N?, GETUTCDATE(), ?, ?)发布于 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‘似乎是不寻常的。
https://stackoverflow.com/questions/3907662
复制相似问题