使用 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 PDO 调用多个存储过程

使用 PHP PDO 调用 MySQL 存储过程 [重复]

PHP MySQL PDO 存储过程和 INOUT 参数

PHP 7和MSSQL PDO:使用输入和输出参数调用存储过程

php pdo & iSeriesAccess ODBC - 使用 OUT 参数调用存储过程不起作用

使用 PDO 调用带有 Out 参数的存储过程