使用 PDO 在 php 中使用 mac 运行 MS SQL 服务器存储过程

Posted

技术标签:

【中文标题】使用 PDO 在 php 中使用 mac 运行 MS SQL 服务器存储过程【英文标题】:Running a MS SQL server stored procedure with a mac in php using PDO 【发布时间】:2014-01-04 18:29:20 【问题描述】:

我正在尝试使用 mac 中的 php 在 ms sql server 的实例中执行存储过程。

我最近购买了一个 mac book pro,但似乎在实现这一点时遇到了真正的问题。

我现在建立了一个连接,我知道它正在工作,就好像我更改了密码一样我收到了消息:

"Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[01002] Adaptive Server connection failed (severity 9)' in /Users/davidwhitwell/Sites/test/connect.php on line 6"

更正密码不会给我错误。

我要运行的脚本是:

    $sql = $pdo->prepare("CALL [finance].[get_all_company_names]");
    $sql->execute();
    $results = $sql->fetchAll();
    var_dump($results);

结果返回一个空数组。我知道数据存在,并且有正确的权限来执行该过程,因为我可以直接使用 sql server management studio 执行此操作。

【问题讨论】:

您可以使用此连接运行一般查询吗? IE。从某个表中选择 *;。 errorInfo 是否有任何输出:php.net/manual/en/pdo.errorinfo.php 不,即使使用常规选择查询,我也没有得到任何返回 【参考方案1】:

由于您提到您无法检索任何数据,即使使用简单的选择查询,我建议在您的脚本中添加一些错误处理。

首先,我会为您的通用 pdo 对象添加一些异常处理。

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

当您的查询失败时,这将引发异常。然后将执行包装在 try/catch 语句中

try 
  $sql = $pdo->prepare("CALL [finance].[get_all_company_names]");
  $sql->execute();
  $results = $sql->fetchAll();
  var_dump($results);
 catch (PDOException $e) 
  echo 'An error occurred: ' . $e->getMessage();

您创建的 sql 和 pdo 对象还有一个名为 errorInfo 的方法,有时会显示错误。

if($sql->execute()) 
  $results = $sql->fetchAll();

else 
  $error_info = $dbh->errorInfo();
  print_r($error_info);

一些不错的资源包括这些页面

PDO 错误处理:http://www.php.net/manual/en/pdo.error-handling.php PDOStatement::errorinfo: http://www.php.net/pdostatement.errorinfo

编辑

我相信终极是MS SQL中的存储过程使用EXEC调用

  $sql = $pdo->prepare("EXEC [finance].[get_all_company_names]");

【讨论】:

谢谢罗伯特,第一个建议返回:“出现错误:SQLSTATE[HY093]:无效参数号:未绑定参数”虽然此存储过程没有参数 第二条建议返回一个致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[HY093]:无效的参数号:没有绑定参数' 您在进行简单选择时是否收到此消息? 谢谢 Robbert,我现在可以使用简单的 select,我相信以前的问题是我没有在 select 语句中指定表的方案名称,我现在也可以使用对于存储过程,您是正确的,问题是使用调用而不是 exec。感谢您的帮助。

以上是关于使用 PDO 在 php 中使用 mac 运行 MS SQL 服务器存储过程的主要内容,如果未能解决你的问题,请参考以下文章

MAC自制php pdo firebird驱动程序

如何使用 PHP PDO 从 Mac 连接到 Sql Server?

如何在 Eclipse PHP 上使用 PDO MySQL 并在 PHP CLI 应用程序中运行?

使用 php 和 pdo 执行 .sql 文件

如何在PHP下开启PDO MySQL的扩展

在 PHP 中到处使用准备好的语句? (PDO)