使用mysql存储例程正确使用php PDO来获取表数据

时间:2016-05-18 13:54:22

标签: php stored-procedures pdo

我想调用mysql存储过程中的两个参数说from和to并打印表中的数据。我使用了以下代码:

while (  $report = $records->fetch()  )

后来我像以前一样使用while循环打印表数据。

select * from employee where age in between 30 and 40;

存储例程proc_report_filtered是一个简单的查询,用于获取年龄范围之间的数据,如下所示:

e.dataTransfer.setDragImage

其中30是$ age_from,40是$ age_to传递给存储例程。

不幸的是代码不起作用。请纠正我出错的地方。我是新手使用php PDO。

1 个答案:

答案 0 :(得分:1)

通常,使用PDO调用存储过程没有什么特别之处。 The only issue可能只影响跟随查询,但不会影响当前查询。

因此,您的问题与存储过程无关,而只与基本的PDO语法有关:您使用错误的代码来获取记录。这是正确的一个

$stmt->execute();
$records = $stmt->fetchAll(PDO::FETCH_ASSOC);

如果不是问题而是复制/粘贴问题,并且为了帮助更多访问者,这里是PDO调试的简短检查列表:

  • 第1步。在数据库控制台中运行查询,以确保其自行运行。
  • 第2步。确保您可以看到所有PHP错误。

    error_reporting(E_ALL);
    ini_set('display_errors', 1); // for the dev server only
    
  • 第3步。通过添加此代码,确保您的PDO抛出异常

    $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
    
  • 第4步。使用PDO::query()运行查询而不使用预先准备好的语句,并使用手写的值:

    $stmt = $db->query("CALL proc_report_filtered(30,40)");
    
  • 第5步。使用预先准备好的声明但以简化形式运行,以消除所有可能的拼写问题:

    $stmt = $db->prepare("CALL proc_report_filtered(?,?)");
    $stmt->execute(array($_POST['from'],$_POST['to']));