PEAR MDB2executeStoredProc 并返回结果集。 可能的? 值得?

发布于 2024-07-19 07:27:08 字数 1224 浏览 6 评论 0原文

在过去的几个小时里我一直在努力让这项工作成功。 我有一个名为 get_log_entries 的简单存储过程:

CREATE DEFINER=`root`@`localhost` PROCEDURE `get_log_entries`(p_min_id INT)
BEGIN
  SET p_min_id = IFNULL(p_min_id, -1);
  SELECT * FROM db_log WHERE item_id > p_min_id;
END

它非常简单,它返回两列结果:item_id (int) 和 log_description (varchar)。

我正在尝试使用 MDB2 对象执行此操作,但到目前为止还没有运气。 这是尝试执行此操作的代码:

$conn = MDB2::factory('mysql://myUser:myPassword@localhost/my_db');

if (PEAR::isError($conn)) {
    die ("Cannot connet to DB(10): " . $conn->getMessage());
}

// loading the Function module
$conn->loadModule('Function');

$params = array('null');

$result = $conn->executeStoredProc('get_log_entries', $params);

if (PEAR::isError($result)) {
    $msg = $result->getMessage() . "<br /><br />" . $result->getUserInfo();
    die ($msg);
}

此时,会出现一个不错的错误并显示消息:

“_doQuery:[错误消息:无法 执行语句] [最后执行的 查询:CALL get_log_entries()] [本机 代码:1312] [本地消息:PROCEDURE wh_search.get_log_entries 无法返回 给定上下文中的结果集]"

现在我有几个问题:
1. 是否可以使用 MDB2 执行 SP 并返回结果集?
2. 或者自己为“本机”PHP-MySQL 函数编写一个包装类更好?

谢谢!

I've been trying to make this work for the last couple of hours. I have a simple stored proc called get_log_entries:

CREATE DEFINER=`root`@`localhost` PROCEDURE `get_log_entries`(p_min_id INT)
BEGIN
  SET p_min_id = IFNULL(p_min_id, -1);
  SELECT * FROM db_log WHERE item_id > p_min_id;
END

It's dead simple and it returns results in two columns: item_id (int) and log_description (varchar).

I am trying to execute this using MDB2 object, but so far no luck. Here's the code that is trying to do it:

$conn = MDB2::factory('mysql://myUser:myPassword@localhost/my_db');

if (PEAR::isError($conn)) {
    die ("Cannot connet to DB(10): " . $conn->getMessage());
}

// loading the Function module
$conn->loadModule('Function');

$params = array('null');

$result = $conn->executeStoredProc('get_log_entries', $params);

if (PEAR::isError($result)) {
    $msg = $result->getMessage() . "<br /><br />" . $result->getUserInfo();
    die ($msg);
}

At this point this nice error shows up with the message:

"_doQuery: [Error message: Could not
execute statement] [Last executed
query: CALL get_log_entries()] [Native
code: 1312] [Native message: PROCEDURE
wh_search.get_log_entries can't return
a result set in the given context]"

Now I have a couple of questions:
1. Is it even possible to execute SPs using MDB2 and return result sets?
2. Or is it better to write a wrapper class for "native" PHP-MySQL functions myself?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我不吻晚风 2024-07-26 07:27:08

没关系,包装 mysqli 来调用 SP。 还有很多乐趣...

Nevermind, wrapping mysqli for calling SP. Also lots of fun...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文