使用 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 服务器存储过程的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PHP PDO 从 Mac 连接到 Sql Server?