【问题标题】:php function that generates queries to database [closed]生成对数据库的查询的php函数[关闭]
【发布时间】:2013-09-21 10:54:00
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 给猫剥皮的方法不止一种。没有一个答案在所有情况下都是最好的。
  • 最好的方法显然是 NOT 来生成查询。 SQL 是比你想象的更丰富的语言。它不仅限于几个愚蠢的运营商。
  • 我对这个主题比较陌生,所以除了查询字符串之外,还有其他方法可以在 PHP 中对 MySQL 数据库进行操作吗?无论我做什么操作,PHP 和 MySQL 之间的唯一媒介似乎最终都是查询?也许我的项目过于简单以至于超出了查询范围?你到底是什么意思?
  • YCS 的意思是,SQL 不仅限于CRUD 操作,但它的强大功能通常在于复杂的查询,这些查询很快就会超出你可以用roll-you-own 所能做的范围。像你上面的代码!
  • 我现在明白了,我刚刚阅读了有关高级操作的信息,它们似乎很有用并且可以提高性能。但是..这个应用程序将是私人的,由大学一个学院的学生使用,因此可能不超过 3000 个同时用户。我不能用基本的 CRUD 操作来完成它吗?似乎更大的项目需要更高级的东西。通过在 sql 中而不是 php 中做更多的事情,我不会过于复杂和过早地优化吗?

标签: php mysql oop pdo


【解决方案1】:

我觉得不对劲的是重新发明轮子。

如何使用可靠的现有库,例如 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));

【讨论】:

  • 这是一个大学项目,所以很遗憾我需要重新发明轮子。我想我应该提到这一点。这就是为什么我的问题不是关于现成的解决方案,而是关于如何自己做。不过我很感谢你的回答,因为我可以看到这个库是如何完成的。
  • 好的,我明白了。要了解更多好主意,请查看 Doctrine QueryBuilder,它允许您以 OOP 方式构建 SQL 查询。
猜你喜欢
  • 2014-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多