在绑定之前如何投射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参数(当然这与等于运算符不兼容?)
我已经通过在正在准备的查询中转换值来解决我的问题,但我觉得我不应该这样做。
感谢您的见解。