【问题标题】:Future-proofing functions for php/sql queries面向未来的 php/sql 查询功能
【发布时间】:2013-06-03 20:13:22
【问题描述】:

我正在尝试为我使用 php 运行的常见查询和其他操作编写一系列实用程序函数。

我想这样做是为了让我的应用程序可以在 PDO、mysqli 和他们接下来提出的任何东西之间轻松升级。

在我开始使用这种方法之前,我想知道是否有一些 PHP 专家可以审查这种方法并告诉我您的想法 - 这对于未来的验证和可升级性来说是个好主意吗?这将如何影响性能?我将来会以任何方式限制我的申请吗?

//BASIC QUERY EXECUTION (ESCAPED)
function qry($sql)
{
    $sql = $db->real_escape_string($sql);
    if(!$result = $db->query($sql))
    {
        die('There was an error running the escaped query [' . $db->error . ']');
    }

    return $result;
}

//PREPARE AN SQL STATEMENT
function prep($sql)
{
    $statment = $db->prepare($sql);
    return $statement;
}

//BIND A PARAMETERS AND VARIABLE TYPE
function bnd($statement,$parameter,$type)
{
    $statement->bind_param($type, $parameter);
    return $statement;
}

//EXECUTE PREPARED QUERY (UNESCAPED)
function ex($statement)
{
    if(!$result = $statement->execute())
    {
        die('There was an error running the prepared query [' . $db->error . ']');
    }
    return $result;
}

//FETCH ARRAY
function ftch($result)
{
    $row = $result->fetch_assoc();
    return $row;
}

//GET NUMBER OF ROWS
function num($result)
{
    $num = $result->num_rows;
    return $num;
}

//FREE THE RESULT
function fre($result)
{
    $result->free();
}

【问题讨论】:

  • 请不要为代码审查投票 - 这不是工作代码。
  • 我不是在问这个问题——我问的是这种方法,因为我想知道其他人是否会做类似的事情,以及这是否是一个好的做法......
  • 除了将名称缩短为某种东西之外,您什么也没做……很奇怪。重点是什么?甚至函数名也没有意义。frefreeex 而不是 execute。你只是让一切变得模棱两可。
  • 诚然没有直接回答你的问题,但你不是用许多处理不同存储引擎的 PHP 框架重新创建轮子吗?​​
  • 原因是因为我可能想从 mysqli 更改为 PDO,或者轻松地在整个系统中添加改进的错误处理等

标签: php sql pdo mysqli future-proof


【解决方案1】:

只是一些准则

  1. 创建一个类,而不是一组独立的函数
  2. 无论什么 real_escape_string 函数不保护任何东西,都不应用于此目的。 PDO 根本没有这样的功能。将此函数应用于整个查询绝对没有意义。
  3. 因此,qry() 函数根本不起作用。
  4. 它也不起作用,因为 $db 超出范围。
  5. 请不要死()!改为抛出异常。 PDO does it already,无需代码

其余的都很好,尽管我会去掉 bnd()prep() 函数,以便在一个 ex() 调用中完成所有操作。而且我还会创建单独的函数来获取单独的结果类型,例如标量、行、行数组和资源。这是我正在谈论的一个示例:基于非常相似的概念的safeMysql class

【讨论】:

  • 谢谢,我不假装是php专家。我只是在学习并试图找到有效的做事方式。我经营着自己开发的成功企业,我需要考虑未来的证明和事情。
猜你喜欢
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
相关资源
最近更新 更多