用于php / sql查询的面向未来的函数

时间:2013-06-07 13:35:56

标签: php sql pdo mysqli future-proof

我正在尝试为常见查询和我使用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();
}

1 个答案:

答案 0 :(得分:1)

只需几条指南

  1. 创建一个类,而不是一组独立的函数
  2. 无论real_escape_string函数不保护任何内容,都不应该用于此目的。 PDO根本没有这样的功能。将此函数应用于整个查询将完全没有意义。
  3. 因此,qry()功能根本不起作用。
  4. 它也不起作用,因为$ db超出了范围。
  5. 请不要死()!而是抛出异常。 PDO does it already,无需代码
  6. 其余的都很好,虽然我会摆脱bnd()prep()函数,以便在一次ex()调用中完成所有操作。而且我还会创建单独的函数来获取单独的结果类型,例如标量,行,行数组和资源。以下是我所谈论的一个例子:safeMysql class基于非常相似的概念