我有以下代码,其中包含基本检查条件,用于使用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中捕获语句?如果我在任何地方出错,请建议我。
另外我觉得代码很长?有什么更好的建议来缩短它吗?
答案 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
是两个不同的变量,恰好具有相同(本地)名称。