使用 PDO 从 PHP 调用存储过程到使用 INPUT 参数的 MYSQL Server
Posted
技术标签:
【中文标题】使用 PDO 从 PHP 调用存储过程到使用 INPUT 参数的 MYSQL Server【英文标题】:Calling stored procedure from PHP using PDO to MSSQL Server using INPUT Paramters 【发布时间】:2014-02-23 08:19:33 【问题描述】:这不起作用:
$dbh = new PDO("dblib:host=xxxx;dbname=xxx", "xxxxx", "xxxxx");
$sth = $dbh->prepare("exec wcweb_UserInfo(?)");
$sth->bindParam(1, $name);
$sth->execute();
while($result = $sth->fetch(PDO::FETCH_ASSOC))
var_dump($result);
这也不起作用:
$dbh = new PDO("dblib:host=xxxxx;dbname=xxxx", "xxxxx", "xxxx");
$sth = $dbh->prepare("call wcweb_UserInfo(?)");
$sth->bindParam(1, $name);
$sth->execute();
while($result = $sth->fetch(PDO::FETCH_ASSOC))
var_dump($result);
这确实有效:
$dbh = new PDO("dblib:host=xxxxx;dbname=xxxx", "xxxxx", "xxxx");
$sth = $dbh->prepare("exec wcweb_UserInfo @userid=?");
$sth->bindParam(1, $name);
$sth->execute();
while($result = $sth->fetch(PDO::FETCH_ASSOC))
var_dump($result);
我使用 2 尝试了上面的方法,它在使用和不使用大括号等的情况下都不起作用。我知道有些人会说,那么就按照它的工作方式来做吧? .. 问题是我正在使用 sqlsrv_query 库将现有应用程序从 IIS 服务器移植到 Linux 服务器。
应用程序中的所有数据库调用都写在使用此方法的函数中:call wcweb_UserInfo(?) .. 没有指定参数名称,因此我必须修改每个数据库调用以包含参数名字。我的印象是 php5 的 PDO 库可以执行相同类型的调用?
帮助!是我做错了什么,还是只是 PDO 无法进行此类调用?
【问题讨论】:
你得到什么错误信息? 完全没有错误信息..这很奇怪。 【参考方案1】:由于某种原因,这可行:
$sth = $dbh->prepare("exec wcweb_UserInfo ?");
$sth->bindParam(1, $name);
$sth->execute();
while($result = $sth->fetch(PDO::FETCH_ASSOC))
var_dump($result);
我也许可以忍受这个。任何人都知道为什么其他方法不起作用?图书馆有区别吗?
【讨论】:
抱歉,在我错过了您使用 SQL Server 的事实之前。 SQL Server 不使用括号进行存储过程调用。以上是关于使用 PDO 从 PHP 调用存储过程到使用 INPUT 参数的 MYSQL Server的主要内容,如果未能解决你的问题,请参考以下文章
PHP 7和MSSQL PDO:使用输入和输出参数调用存储过程