为什么要为已经存在的标准SQL函数使用自定义SQL函数呢?


why use custom sql functions for standard ones that already exist?

我正在使用oscommerce,所以你可能需要了解它才能回答这个问题,但我认为它不是很通用。

为什么最初的程序员会创建这样的函数来执行基本的sql查询:

  function tep_db_query($query, $link = 'db_link') {
    global $$link, $logger;
    if (defined('STORE_DB_TRANSACTIONS') && (STORE_DB_TRANSACTIONS == 'true')) {
      if (!is_object($logger)) $logger = new logger;
      $logger->write($query, 'QUERY');
    }
    $result = mysql_query($query, $$link) or tep_db_error($query, mysql_errno(), mysql_error());
    if (defined('STORE_DB_TRANSACTIONS') && (STORE_DB_TRANSACTIONS == 'true')) {
      if (mysql_error()) $logger->write(mysql_error(), 'ERROR');
    }
    return $result;
  }

当我似乎能够完成查询使用常规的mysql_query?

我的猜测是,这样你就不必一直重新定义数据库连接?我不确定,因为我可以像我说的那样使用mysql_query。显然,我是新手,所以我错过了一些东西,只是好奇。

如果您逐行浏览代码并查看它的功能,很明显该函数是用来记录和执行查询的。mysql_query将执行sql,但不做任何日志记录。

因为你不需要每次都写mysql_query,因为你不需要每次都写错误处理,当你要写一个mysql查询。所有重复的事情都可以在自定义函数中处理。这就是我们编写自定义函数的原因。你不需要在每次mysql_query调用时都写mysql_error(),因为你有自己的自定义mysql_error()可以处理所有这些事情。

我们可以在一个自定义函数中处理泛化的东西,这样我们就不必在每次调用mysql_query时一次又一次地编写它们。

在本例中,to

    当STORE_DB_TRANSACTIONS设置为true时,
  • 记录所有数据库查询,并且
  • 以一致的方式引发(并记录)由此类查询引起的任何错误

不评论代码的实际质量,这是一种非常常见的做法。

在这个函数中,它们不仅调用mySQL,而且将查询记录到日志对象中,根据框架常量运行检查并定义自定义错误处理程序。这是一个函数,因为他们不想在每次查询DB时都将此代码写出来。