【发布时间】: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 中做更多的事情,我不会过于复杂和过早地优化吗?