2012-09-18 29 views
3

我知道这听起来确实很愚蠢,但我发现mysqli准备好的语句和面向对象的方法很有吸引力,所以我打算将我过去的一些涂鸦从mysql转换为mysqli。PHP5 mysqli vs mysql的配置文件

这是...的问题

在MySQL中我曾经有一个配置文件,例如包含在每个需要的数据库(即require('sys/dbconfig.php');

我的文件不知道是否需要在mysqli中执行此操作,或者如其他人所说的那样执行此操作时,在需要时打开连接,在不需要时关闭它(即在需要数据库事务处理时将其关闭)

回答

1

我那样做:

的config.php

define("DB_HOST", "127.0.0.1"); 
define("DB_NAME", "demo"); 
define("DB_USER", "root"); 
define("DB_PASS", "root"); 

database.php中

// include database constants 
include_once("config.php");     

// create db connection 
$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);   

现在你可以通过

$result = $db->query("SELECT x FROM y;");    
+0

顺便说一句,这是一个非常简单的类/方法的例子... – Sliq

+0

哦,好主意:P这正是我所猜测的,有全局常量定义在配置和开放/关闭连接到处,你需要它:)是正确的? –

+0

在这种情况下,我会在脚本/应用程序的开头创建$ db,并使用$ db,无论您需要它。 PHP会每次使用相同的数据库连接($ db是ONE连接)..(或者我误解了你的问题?) – Sliq

0

MySqlI进来2种口味:程序面向对象

当您使用程序款式应有尽有停留在相同mysqli_。 你指的是面向对象风格,那里的配置是不同的..实际上更多的面向对象。这意味着你必须创建一个mysqli的新实例并使用它的方法来完成工作。

注意:使用mysqli_的方式与mysql相同时,您将遇到与SQL注入相同的问题。您应该将mysqli与准备好的查询和参数绑定结合使用。

+0

那么,我应该像过去一样做一些配置文件,或者我需要时打开连接,当我不需要时关闭它? –

+0

如果你想使用程序风格:是的。看到我关于SQL注入的警告! – JvdBerg

+0

是的我的意思是我期待preparedStatements;)我一直在使用mysql_real_escape_string像疯了一样,我觉得很不方便。那么我怎么能用mysqli做到这一点呢?当我需要时打开连接并在完成时关闭它?丢弃配置文件并将连接代码添加到应用程序级别? –

0

mysqli的打开让SQL语句它是什么时候的连接用new mysqli(...)实例化(PDO也是如此)。

在PHP会话期间,您不需要打开/关闭连接到数据库,因为PHP会话(对于常规网站/ webapps)的持续时间少于1秒。

在代码中多次强制使用等效的mysql_connect/mysql_close,只有在长时间运行的脚本中,它们在整个持续时间内不需要活动连接。

根据您服务器的配置,每个mysql用户允许的单独mysql连接的数量是有限的。

如果您有一些运行很长时间的脚本,并且可能会与其他许多脚本相交,则可以使用每个用户的所有允许连接,从而阻止其他用户。

我建议(作为一种简单的方法)来实例化一个文件中的mysqli,你将包括无处不在,你需要DB访问使用你存储的mysqli对象无处不在,你需要使用global $db变量。

0

我倾向于在像Panique那样的配置文件中创建常量。

我还使用包含连接代码的静态方法fetch_db创建App类。然后,每当我需要一个数据库连接,我只需拨打App::fetch_db()

我可以在今天下午晚些时候发布代码和更多的解释,当我回家。