-2

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

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

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();
}

或者类似的东西,不确定这个确切的代码是否有效,因为我还没有做到。

无论如何,通过在一个函数中生成查询,我可以只在列表中传递查询并执行一个循环来生成并执行所有查询。但是感觉还是不对。是这样完成的,还是我错过了不同的、更好的解决方案?

4

1 回答 1

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));
于 2013-09-21T10:59:35.837 回答