0

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

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

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 Profiler 日志将准备好的语句显示为:

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 参数被强制转换为文本(这当然与等号运算符不兼容?)

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

感谢您的见解。

4

0 回答 0