带有 SQL Server 和准备好的语句的 PHP PDO

标签 php sql-server pdo odbc

已经发布了许多与此类似的问题。但是我还没有找到让这段代码正常工作的方法。

我正在从 native MSSQL 查询更新 PHP 代码库以使用 PDO,特别是使用 ODBC。这是旧代码和我尝试过的两个变体。

旧样式:有效,这会产生一系列预期结果。

$db = mssql_connect('connection', 'user', 'password');
mssql_select_db('database', $db);

$sp = mssql_init('procedure', $db);
$param=1;
$results=[];
mssql_bind($sp,'@param',$param,SQLINT4,FALSE,FALSE);
$spRes = mssql_execute($sp);

while ($row = mssql_fetch_array($spRes, MSSQL_ASSOC)) $results[] = $row; 
mssql_free_statement($sp);
var_dump(results);

将 T-SQL 与 PDO 结合使用几乎可以正常工作:只要我不尝试绑定(bind)任何参数,我就会得到结果。

$pdo = new PDO($'dblib:host=connection', 'user', 'password');
$pdo->query('use database');

$sp= $db->prepare("EXEC procedure");
$sp->execute();

while ($row = $sp->fetch(PDO::FETCH_BOUND)) $results[] = $row; 
$sp->closeCursor();
var_dump(results);

产生许多预期结果的数组。然而,任何绑定(bind)参数的尝试都会导致 $results 成为一个空数组。没有错误报告。

$sp= $db->prepare("EXEC procedure :param");
$sp->bindParam(':param', $param, PDO::PARAM_INT);

这会导致一个空的结果集,并且不会报告任何错误。

使用 ODBC "SQL" 似乎根本不起作用:

$pdo = new PDO($'dblib:host=connection', 'user', 'password');
$pdo->query('use database');

$sp= $db->prepare("CALL procedure");
$sp->execute();

while ($row = $sp->fetch(PDO::FETCH_BOUND)) $results[] = $row; 
$sp->closeCursor();
var_dump(results);

$results 为空;有或没有参数,它似乎都不起作用。

系统详细信息:在安装了 unixodbc 和 freetds 的 Ubuntu Trusty (14) 上运行 PHP 5.5.9。

我非常希望有一个 PHP PDO 调用存储过程并使用 MSSQL 绑定(bind)参数的工作示例。

最佳答案

试试这个..

$result = array();

$sp= $db->prepare("EXECUTE dbo.procedure :param");
$sp->bindParam(":param", $param, PDO::PARAM_INT);
$sp->execute();

$result = $sp->fetchall(PDO::FETCH_OBJ);

关于带有 SQL Server 和准备好的语句的 PHP PDO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40336368/

相关文章:

php - JOIN 2 具有不同列的表

php pdo 准备重复变量

php - 如何在请求之间保留 MongoDB 游标?

php - 如何确保使用 cURL 保存文件

sql - 如何在 SQL 中按日期范围连接多个表?

sql - 将多行合并为一列,不重复

php - 新的 PDO 拒绝工作

php - 发布循环数据,然后使用 PDO 保存

php - 表单验证以及数据库错误

sql-server - 如何在非主键上正确连接多个表?