【问题标题】:Running a MS SQL server stored procedure with a mac in php using PDO使用 PDO 在 php 中使用 mac 运行 MS SQL 服务器存储过程
【发布时间】: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
  • 不,即使使用常规选择查询,我也没有得到任何返回

标签: php sql-server stored-procedures pdo


【解决方案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);
}

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

编辑

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

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

【讨论】:

  • 谢谢罗伯特,第一个建议返回:“出现错误:SQLSTATE[HY093]:无效参数号:未绑定参数”虽然此存储过程没有参数
  • 第二条建议返回一个致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[HY093]:无效的参数号:没有绑定参数'
  • 您在进行简单选择时是否收到此消息?
  • 谢谢 Robbert,我现在可以使用简单的 select,我相信以前的问题是我没有在 select 语句中指定表的方案名称,我现在也可以使用对于存储过程,您是正确的,问题是使用调用而不是 exec。感谢您的帮助。
猜你喜欢
  • 2017-06-03
  • 2014-02-24
  • 2023-03-10
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
  • 2014-08-08
  • 2013-08-26
相关资源
最近更新 更多