PHP PDO与SQL Server和准备好的语句

时间:2016-10-31 03:56:57

标签: php sql-server pdo odbc

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

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

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

$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一起使用几乎可行:只要我不尝试绑定任何参数,我就会得到结果。

$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);

生成许多预期结果的数组。但是,任何绑定参数的尝试都会导致$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& amp ;;在Ubuntu Trusty(14)上运行PHP 5.5.9安装了freetds。

我非常感谢PHP PDO使用MSSQL调用存储过程和绑定参数的工作示例。

2 个答案:

答案 0 :(得分:3)

尝试更改此内容 -

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

- 到此 -

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

请参阅ODBC documentation on Procedure Call Escape SequencePHP PDO documentation了解更多信息......

答案 1 :(得分:3)

试试这个..

$result = array();

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

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