我正在写一些PHP代码,而且我经常访问我的MySQL数据库来读取和更新字段。
我当前的代码包含一个名为dbconnnect的类,我按如下方式使用它:
class edit_data extends dbconnect {
//<some php code>
parent::connect();
//<get info from database>
parent::disconnect();
//<evaluate data>
我的问题 - 这是连接和断开MySQL数据库的最有效方法吗? (请记住,我几乎总是连接到同一个数据库,因此无需每次都重新定义连接参数。)
我正在考虑在构造函数中运行connect,所以我可以写
$connector = new dbconnect();
但我意识到我实际上并没有通过这样做来节省多少 - 对吗?
感谢。
答案 0 :(得分:1)
确保在每个文件的开头和结尾自动包含/运行db connection / disconnect的代码,而不需要为每个文件单独执行。确保此代码存储在1个位置并包含在所有其他文件中,因此您可以在需要时轻松更改它。只要你做这些事情,剩下的就是你想要如何连接/断开数据库的个人偏好。
我还建议使用CodeIgniter这样的框架来处理每个文件的幕后常见任务。
答案 1 :(得分:1)
使用
$connector = new dbconnect();
而不是
parent::connect();
您实际上是将edit_data类与dbconnect类分离。你的意思是:
答案 2 :(得分:0)
“正确”的方式可能是像MySQLi和PDO扩展一样 - 在构造函数中打开连接并在析构函数中关闭它。 “高效”的方法是检查query()方法中的连接,然后(r)在必要时打开它。
在这两种方法中,您都避免创建单独的connect()方法,从而消除了忘记在脚本中调用它的风险。
答案 3 :(得分:0)
除非您知道每次都要连接到数据库,否则我不会将连接片放在构造函数中。如果你不需要连接,你不应该,它很昂贵。您的构造函数应该只接受连接参数。虽然看起来你可能正在使用静态类,但构造函数会被执行。
正如Krzysztof所说,你应该按需连接。在我的数据库类中,我的所有查询最终都通过“execQuery”函数。该函数检查是否存在与数据库的连接。 拥有单个中央查询功能还允许您执行记录在会话中运行的所有查询,添加计时,日志记录或您需要执行的任何其他操作的事情。
在析构函数中断开连接是正确的位置。
答案 4 :(得分:0)
我们的代码库有很多路径,并且大量使用缓存。
我们只在执行第一个查询时才连接数据库。 (实际上在 - &gt; query()方法上)。
我们让PHP在脚本结束后断开连接,并且不显式调用 - &gt; disconnect
答案 5 :(得分:0)
Juts确保重用你的连接:
查看new_link参数:
如果使用相同的参数对mysql_connect()进行第二次调用,则不会建立新的链接,而是返回已打开的链接的链接标识符。 new_link参数修改了这种行为,并使mysql_connect()始终打开一个新的链接,即使之前使用相同的参数调用了mysql_connect()。在SQL安全模式下,将忽略此参数。
答案 6 :(得分:0)
我认为从“dbconnect”类派生你的“edit_data”类表明了逻辑的混乱。您的数据编辑对象是特殊类型的数据库连接吗?或者说数据编辑对象需要使用数据库连接会更有意义吗? (这是IS A和HAS A之间的区别。)
虽然它现在似乎已不再流行,但您可以使用单例工厂调用来获取数据库处理程序。那么任何需要它的函数都可以简单地调用它。如果你在第一次做任何工作时让处理程序自我初始化,那么甚至不需要担心初始化它。 (为此,请检查包含句柄的实例变量是否为资源句柄 - 如果不是,请调用初始化程序。记住如果连接失败,请确定要执行的操作。)然后,您只需要一种方法让处理程序找到它的配置。我会让工厂做那个,而不是初始化。
这样做的一种变体方式是构造函数获取当前数据库处理程序并在实例变量中引用它。这可以通过几种方式完成。在构造函数中需要它可能会起作用,或者您可以再次使用单件工厂调用。如果数据库处理程序不会初始化(工厂调用可以检查),则此技术为对象构造函数提供了拒绝实例化的机会。
答案 7 :(得分:0)
mysql_pconnect
而不是mysql_connect