背景
开发环境:
在Windows 10 x64上使用Apache 2.4.16的PHP 7.0.4SQL Server 2014标准
使用ODBC SQL Server
驱动程序
问题
执行查询包含子查询时无法获取任何结果
除了以下示例之外,所有其他查询都包含子查询失败,并且某些查询需要处理来自用户的直接输入,因此需要卫生以避免SQL注入。
假设成功代码
$dblink = new PDO("odbc:Driver={SQL Server};Server=$server;Database=$db", $user, $password);
$stmt = $dblink->prepare("SELECT * , ( SELECT RTRIM([Permission]) FROM [StaffLogin] WHERE [Staff].[StaffID] = [StaffLogin].[StaffID] ) AS [Permission] FROM [Staff] WHERE [StaffID] = ?");
$stmt->bindValue( 1 , "00522" , PDO::PARAM_INT);
$stmt->execute();
$stmt->fetchAll(PDO::FETCH_ASSOC);
但上面的代码没有返回任何结果。
解决代码问题
$dblink = new PDO("odbc:Driver={SQL Server};Server=$server;Database=$db", $user, $password);
$stmt = $dblink->prepare("SELECT * , ( SELECT RTRIM([Permission]) FROM [StaffLogin] WHERE [Staff].[StaffID] = [StaffLogin].[StaffID] ) AS [Permission] FROM [Staff] WHERE [StaffID] = '00522'");
$stmt->execute();
$stmt->fetchAll(PDO::FETCH_ASSOC);
此代码返回一行记录。
修改
以下两项都尝试了
$stmt->bindValue( 1 , "00522" , PDO::PARAM_INT); // No result
$stmt->bindValue( 1 , "00522" , PDO::PARAM_STR); // No result
答案 0 :(得分:0)
当您想要绑定字符串时,您正在绑定整数:
$stmt->bindValue( 1 , "00522" , PDO::PARAM_STR);