PHP PDO :: prepare - 什么决定了类型?

时间:2013-10-23 03:51:21

标签: php sql-server-2008 pdo

在绑定之前如何投射PDO :: prepare参数标记的决定实体是什么?

例如,以下查询使用PDO发送到MSSQL:prepare:

SELECT r.name, p.name, i.[grant] AS permGrant
            FROM  acl AS r
            JOIN  acl AS p ON p.type =  'p'
            AND p.name = :permName
            JOIN  acl AS i ON i.type =  'i'
            AND p.id = i.permissionInstanceRefID 
            AND r.id = i.referenceAclId 
            WHERE r.name =  'Anonymous'
            AND r.type =  'r'

在MSSQL中准备时,SQL事件探查器日志会将准备好的语句显示为:

declare @p1 int 
set @p1=NULL
exec sp_prepare @p1 output,N'@P1 text',N'
            SELECT r.name, p.name, i.[grant] AS permGrant
            FROM  acl AS r
            JOIN  acl AS p ON p.type =  ''p''
            AND p.name = @P1
            JOIN  acl AS i ON i.type =  ''i''
            AND p.id = i.permissionInstanceRefID
            AND r.id = i.referenceAclId
            WHERE r.name =  ''Anonymous''
            AND r.type =  ''r''
            ',1
select @p1

在MSSQL数据库表中,p.type被转换为varchar(25) - 什么是确定要转换为文本的@P1参数(当然这与等于运算符不兼容?)

我已经通过在正在准备的查询中转换值来解决我的问题,但我觉得我不应该这样做。

感谢您的见解。

0 个答案:

没有答案