可以尝试在用户定义的php函数

时间:2016-05-19 12:38:07

标签: php mysql pdo try-catch

我有以下代码,其中包含基本检查条件,用于使用mysql和php过滤数据。

我有两个名为 proc_report proc_report_filtered 的程序,它可以获取所有数据,另一个程序根据表格中设置的过滤器显示数据。 ( submit_filter 是提交按钮的名称,是表单中的两个输入字段。)

以前代码用于在try和catch语句代替display_default_data()时工作并显示所有数据的代码;在其他部分。但是为了缩短代码我已经使用了函数display_default_data()来避免一次又一次地重写同一段代码。但令人惊讶的是,当我运行此代码时,我看不到任何结果。

<?php
    function display_default_data()
    {
        try {
            $records = $db->query("call proc_report");
            $records->setFetchMode(PDO::FETCH_ASSOC);
        } catch (PDOException $e) {
            die("Some problem getting data from database !!!" . $e->getMessage());
        }
    }

    if (isset($_POST['submit_filter'])) {
        if (isset($_POST['from'], $_POST['to'])) {
            if (!empty($_POST['from']) && !empty($_POST['to'])) {
                try {
                    $from = $_POST['from'];
                    $to = $_POST['to'];
                    $records = $db->prepare("CALL proc_report_filtered(?,?)");
                    $records->execute(array($from, $to));
                } catch (PDOException $e) {
                    die("Some problem getting data from database !!!" . $e->getMessage());
                }
            } else {
                echo "Enter some values before pressing Filter button !";
                display_default_data();
            }
        } else {
            echo "Please set values ";
            display_default_data();
        }
    } else {
        display_default_data();
    }
?>

这是使用函数的写方式吗?在php中捕获语句?如果我在任何地方出错,请建议我。

另外我觉得代码很长?有什么更好的建议来缩短它吗?

2 个答案:

答案 0 :(得分:1)

  

可以尝试使用用户定义的php函数编写catch语句吗?

  

这是使用函数的写方式吗?在php中尝试捕获语句?

NO。 You should never catch an error exception to report it。只留下PDOExceptions。

  

另外我觉得代码很长?

非常冗长。您需要的所有代码都是

<?php
if (!empty($_POST['from']) && !empty($_POST['to'])) {
    $records = $db->prepare("CALL proc_report_filtered(?,?)");
    $records->execute(array($_POST['from'], $_POST['to']));
} else {
    $records = $db->query("call proc_report");
}
// here you can start displaying your records.

答案 1 :(得分:0)

这与try / catch无关。相反,问题是您在其范围之外的函数中访问$records

由于您只是写信给它,您只需返回该值并将其分配给来电者网站的变量:

function display_default_data()
{
    try {
        $records = $db->query("call proc_report");
        $records->setFetchMode(PDO::FETCH_ASSOC);
        return $records;
    } catch (PDOException $e) {
        die("Some problem getting data from database !!!" . $e->getMessage());
    }
}

/* ... */

$records = display_default_data(); // instead of just display_default_data();

请注意,$records内的display_default_data 和<{1}} 之外的$records 是两个不同的变量,恰好具有相同(本地)名称。