php函数,用于生成对数据库的查询

时间:2013-09-21 10:54:00

标签: php mysql oop pdo

非常基本的问题,我正在制作将对数据库生成查询的函数。我有两种解决方法,我不知道哪种更好。

首先是创建一个更大的函数来生成我需要的任何查询,所以基本上:

function generateQuery($object, $queryType, $tableName, $conditions = null) {
    //Then in here some more complex code that generates query,
    //some of stuff like double if shorthands etc, for example:

    $string = ($queryType === "INSERT") ? "INSERT INTO {$table} (" : (($queryType === "UPDATE") ? "UPDATE {$table} SET" : "SELECT");

    //So all the code for generating INSERT, UPDATE and SELECT in one function
    //full of conditions.
}

或者我可以为每种类型的查询编写单独的函数。

最后,第一个解决方案根本不复杂,第二个解决方案会在代码中重复一些,但它确实感觉有点不对。

然后我想再次使用PDO事务,所以我会有这样的函数:

function launchQueries($list) {
    $this->handler->beginTransaction();

    for($i = 0; $i < count($list); $i++)
    {
        $this ->launchQuery($list[i]->object, $list[i]->$table, $list[i]->queryType, $list[i]->conditions);
    }
    $this->handler->commit();
}

或类似的东西,不确定这个确切的代码是否可行,因为我尚未制作它。

无论如何,在一个函数中生成查询我只能在列表中传递查询并执行一个循环来生成并执行它们。但它仍然感觉不对。是这样做的,还是我错过了不同的,更好的解决方案?

1 个答案:

答案 0 :(得分:0)

我觉得错误的是重新发明轮子。

如何使用稳定的现有库,例如Doctrine DBAL

它是跨平台的,并提供方便的方法,例如insert()update()delete()

$conn->insert('user', array('username' => 'jwage'));
$conn->update('user', array('username' => 'jwage'), array('id' => 1));
$conn->delete('user', array('id' => 1));