我有以下带有基本检查条件的代码,用于使用mysql和php过滤数据。
我有两个名为proc_report和proc_report_filtered的过程,一个获取所有数据,另一个显示基于表单中设置的from和to筛选器的数据
以前,当try-and-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中使用函数和try,catch语句的正确方式吗?如果哪里出了问题,请建议我。
我还觉得代码很长吗?有什么更好的缩短建议吗?
可以在用户定义的php函数中编写try-and-catch语句吗?
是的。
这是在php中使用函数和try,catch语句的编写方法吗?
没有。您永远不应该捕获错误异常来报告它。只需保留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.
这与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();
注意,display_default_data
的内部的$records
和外部的$records
是两个不同的变量,恰好具有相同的(局部)名称。