更新:感谢所有帮助人员,我决定尝试编写自己的PHP类来处理MySQL请求。
当我尝试从mysql_
切换到mysqli_
函数时,我现在遇到了一个问题,因为我有几万行PHP / MySQL代码分散在数百个文件中的查询,并且它们都使用mysql_query
,mysql_num_rows
,mysql_fetch_assoc
等功能。逐行更改这些功能(即使使用find /用预先准备好的语句替换mysqli_
函数,所有这些都很痛苦,但是如果将来PHP.net决定发布其他会弃用mysqli_
函数的东西会怎样呢?
所以现在我正在考虑编写我自己的MySQL库(你会称它为什么?)调用mysqli_
函数并将其包含在我的所有文件中。这样,如果我将来需要更改其他内容,理论上我可以更改“库”中的功能一次,更改将反映在所有页面上,而不是手动完成并手动更改所有内容。
这会是个好主意吗?我在网上发现了一些名为MeekroDB的东西,但首先我不确定它是不是我正在寻找的东西,其次他们收取50美元用于商业用途(我想做的)。有其他免费解决方案,还是我只是在浪费时间?
感谢任何意见/反馈:)
编辑:如果不清楚,那就好像我正在向数据库查询的每个文件中建立与数据库的连接。我有一个function.php文件,用于连接到MySQL数据库,我include
该文件存放在我的所有其他文件中。我的问题与mysql_query
,mysql_num_rows
和mysql_fetch_assoc
等功能更相关。
答案 0 :(得分:4)
从查看引用的MeekroDB
链接,我不认为你所写的是像mysql_*
/ mysqli_*
方法那样的MySQL API。
您实际上想要编写的是数据库抽象层,尽管它特定于MySQL。
事实是,除非你要编写自己的底层模块与MySQL进行通信(当然,你也可以在PHP中执行 ),你可能会去最后还是以mysqli_
方法作为后盾。
有很多这些图层可用,但我老实说考虑使用PDO而不是编写自己的图层,或者如果您担心函数被弃用,请使用mysqli_*
。 PDO使用自己的MySQL驱动程序,因此如果需要,将更新。它还支持您需要的所有内容,包括易于使用的事务,准备好的语句和诸如此类的内容。
如果您想创建自己的简单访问方法,例如DB::Query(..)
,可以通过将PDO包装得足够简单来实现。
总的来说,我不知道这对组织代码有何帮助。您可能希望在您的数据库中查找类似ORM(对象关系映射器)的内容,您可以在其中定义直接映射到表中的自己的类,除了边缘情况之外,这应该可以减少几乎完全运行查询的需要。最全面的ORM可能是Doctrine,尽管你可以很容易地编写自己的ORM,包装PDO。
就像使用ORM可以实现的一个例子一样,这里有一段代码来演示:
$blogPost = BlogPosts::Load(123);
$blogPost->title = 'New Title';
$blogPost->save();
答案 1 :(得分:3)
围绕基本的PHP数据库函数包装代码是一个好主意,否则已经有一些很好的解决方案,你不应该建立自己的库。也许ORM(Object-relational_mapping)会让你感兴趣,流行的库是doctrine或propel。
答案 2 :(得分:2)
这会是一个好主意吗?
事实上,这是处理SQL查询的唯一理智的方式。
我建议你library, designed to protect your queries against SQL injections。它绝对是免费的,比任何花费50美元或5000美元的东西要好。
在开始使用它之前,你唯一需要学习的是类型提示的占位符,但这个概念非常简单,我相信你会在一秒钟内得到它。不过,请随时提出任何问题。
顺便说一句,PDO显然不是可行的方式 - 它是丑陋的,使用起来很烦人,而且对于几乎超出几个基本情况的任何查询都是不安全的。
例如:
// SafeMySQL: only 2 lines and not a sign of injection
$sql = "SELECT * FROM goods WHERE category IN(?a) ORDER BY ?n";
$data = $db->getAll($sql, $_GET['categories'], $_GET['orderby']);
// PDO
// errr... (massive headscratching resulting with something like
// 2 screens of code with manual escaping and all that stuff
// but most likely still unsdafe as only few PHP developers
// actually have an idea how to properly handle such cases )
答案 3 :(得分:1)
您正在寻找类似于“数据库包装类”的东西。
PHP 5.1以来有一个内置的抽象层,称为PDO。