关于在php脚本中组织多个mysql查询代码的想法


Thoughts on organizing code for multiple mysql queries in php scripts

我认为这是一个随机的问题,它更多地与风格和组织有关。我有一个web应用程序,我使用PDO与MySQL数据库连接,并在一些脚本中有很多查询一个接一个不一定涉及相同的表。例如,我将在一个中执行SELECT语句,然后根据一些值,我将更新另一个,最后从另一个中删除。

事情是我最近才学会PHP和MySQL,因为我不确定,想要小心,并容易地发现任何问题(和一点,因为我有点强迫症和愚蠢的东西,如一致性和编码风格),在每个查询我使用以下格式

try {
    $statement = "
        UPDATE/SELECT   ...
        FROM/SET    ...
        WHERE   ...";
    $query = $dbcnx->prepare($statement);
    $flag = $query->execute();
}
catch (PDOException $e) {
    $errorMsg = "...";
    error_log($errorMsg,3,'../../xxx.log');
    $response = ...;
    $dbcnx->null;
    return $response;
}
$result = $query->fetch/fetchAll/fetcColumn...

所以我可以找到任何问题会发生的地方(try/catch),并且可以安全地防止注入和无效字符(prepare)(我有一些个人检查,但我很确定一个专门为之设计的函数会更好)。

当我有一个或两个查询时,它是好的,但随着代码的增长,它变得有点太多的代码对于很少的动作/内容(像16行一个查询…)

所以我想要一些建议。如何使我的代码更易于管理?我在结构上的逻辑(我写它的方式)是否有一些根本性的错误?使用try/catch有什么规则吗?它是否更适合开发和调试,然后您可以删除其中的一些块?

我正在考虑用这段代码创建一个函数,并以语句作为参数调用它。所以我会在主体中'键入'查询,然后调用函数在那里它会被准备,执行,然后返回结果。当然,我会一直使用fetchAll,并返回一个关联数组,但我认为只要数据集很小,内存使用就会很好(在任何情况下,在当今的系统中,它应该花很多时间来注意到差异,我认为)…

欢迎有任何想法。

我意识到这实际上不是代码、设置、s/w和程序的问题,但我确实希望它仍然遵循精神。

首先,感谢你的问题。
让我非常惊讶的是,这里很少有问题要求更好的代码实践。
没有人关心他们的代码质量,但每个人都要求复制/粘贴代码,而不管他们得到了什么。

接下来,有两件重要的事情你需要知道:

  1. 试试. .Catch是一个异常(无意双关语)操作符。它必须很少使用,因为您可以从中恢复的错误,请遵循代码进行处理。使用它来记录错误是一种致命的罪恶,并且浪费了宝贵而强大的机制。你真正需要的是一个数据库抽象层来完成所有的脏工作和处理复杂的情况。

你需要阅读异常。
这是自语法高亮显示以来编程语言的最大改进。
他们不打算立即被抓住。其要点恰恰相反——以集中的方式捕获异常,使用单个异常处理程序。

但是即使没有处理程序异常也足够好了。一个错误的查询将停止您的脚本,将显示一个503错误,并将记录一个错误消息或根据PHP设置在屏幕上显示它-没有什么想要的!

所以,去掉所有的处理代码告诉PHP用哪个文件记录错误

ini_set('log_errors',1);
ini_set('error_log','/path/to/log');

,您将用更少的代码获得相同的结果。

对于抽象库,只需查看您的代码:

$statement = "UPDATE/SELECT  FROM/SET    ...         WHERE   ...";
$query = $dbcnx->prepare($statement);
$flag = $query->execute();
$result = $query->fetch/fetchAll/fetcColumn...

4行,其中只有 1行有意义。

为什么不把它变成一行-

$result = $db->getRes( $statement); //okay, leaving query separate for readability

只是给你一个关于它如何可能的想法-我自己的数据库抽象类
它是基于mysql之上的,但可以很容易地在任何其他驱动程序上重写,包括PDO