跨多个文件连接到mysql数据库的最有效方法(PHP)

时间:2012-06-11 03:42:31

标签: php mysql

如果有很多方法可以实现相同的结果,我想知道哪种方法是初始化mysql连接的最有效方法。

注意:最近我还在PHP文档中发现mysql_connect现在是DISCOURAGED,我的所有代码当前都使用mysql_connect。是否有足够的理由转换?

我要做的是:

  1. 创建database.php。
  2. 要连接到数据库的PHP页面将包含此文件,这样我就不必编写大量代码来连接数据库。
  3. 那么这个database.php应该做什么,以便最有效率。

    1. $con = mysql_connect("etc"...)
       mysql_select_db("databse")
    

    //从这里我可以包含这个文件并开始进行查询。 - 工作,但我不确定它是否是最佳方式。

    2. //database.php
       $mysqli = new mysqli('localhost', 'user', 'pwd', 'database');
       // in other files
       $mysqli->query("SELECT ...")
    
    1. 还是应该使用持久连接? (该网站数据库非常繁重,并且会有很多页面生成,同时登录的用户不超过100个)
    2. 提前谢谢

5 个答案:

答案 0 :(得分:6)

我刚刚在我的代码中将MySQL扩展的所有功能都改为PDO。

为了最灵活,您应该使用如下常规连接创建“database.php”:

<?php
$pdo = new PDO('mysql:host=example.com;dbname=database;charset=UTF-8', 
               'username', 
               'password');

然后在其他页面中,使用require()包含如下文件:

<?php
require('database.php');

// Example with 'query'
$queriedSQL = $pdo->query('SELECT * FROM table');

// Example with 'prepare'
$preparedSQL = $pdo->prepare('SELECT * FROM other_table WHERE id = ?');
$preparedSQL->setFetchMode(PDO::FETCH_ASSOC);

while($result = $queriedSQL->fetch(PDO::FETCH_ASSOC)) {
  $preparedSQL->execute(array($result['id']));
  $preparedSQLResult = $preparedSQL->fetch();
  // Process code here
}

另一方面,您可以将“index.php”作为核心,然后处理URL或$_GET[]以包含相应的文件(如所有CMS系统,Wordpress等)。

这样,当某些数据(主机,用户名,密码和/或数据库名称)发生变化时,您可以避免更改代码量。

关于持久连接,PHP允许它,但是你可以在here中找到它们的缺点。

答案 1 :(得分:3)

您应该做的第一件事是创建一个mysql.config.php文件。

<?php
define('MYSQL_HOST','');
define('MYSQL_USER','');
define('MYSQL_PASSWORD','');
define('MYSQL_DATABASE','');
?>

您应该做的第二件事是创建一个mysql.class.php文件,该文件处理所有数据库连接细节(模拟此行为)。只需添加新功能即可扩展numRows功能等功能。

<?php
require_once 'mysql.config.php';
class MySQL {
private $query;
private $result;
public function __construct($host = MYSQL_HOST, $user = MYSQL_USER, $password = MYSQL_PASSWORD, $database = MYSQL_DATABASE) {
    if (!$con = mysql_connect($host,$user,$password)) {
        throw new Exception('Error connecting to the server');
    }
    if (!mysql_select_db($database,$con)) {
        throw new Exception('Error selecting database');
    }
}
public function query($query) {
    $this->query = $query;
    if (!$this->result = mysql_query($query)) {
        throw new Exception('Error performing query '.$query);
    }
}
public function numRows() {
    if ($this->result) return mysql_num_rows($this->result);
    return false;
}
}
?>

您需要做的最后一件事是在您的应用中使用这些文件。

<?php
require_once 'mysql.class.php';
try {
    $db = new MySQL();
    $db->query('SELECT username FROM login WHERE username = "'.$USERNAME.'" LIMIT 1');
    if ($db->numRows() == 1) print_json(array('user'=>true),true);
    else print_json(array('user'=>false),true);
} catch(Exception $e) {
    echo $e->getMessage();
    exit();
}
?>

答案 2 :(得分:1)

由于网站数据库很重,我建议您使用PDO进行数据库连接。还使用事务进行多个查询,以减少PHP-MySQL流量。

详细信息:http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html

答案 3 :(得分:1)

关于PHP编程语言,MySQL是旧的数据库驱动程序,而MySQLi是改进的驱动程序。 MySQLi利用了MySQL 5的新功能。从php.net网站逐字解读:

  • 面向对象的界面
  • 支持准备好的陈述
  • 支持多种语句
  • 支持交易
  • 增强的调试功能
  • 嵌入式服务器支持 您可以选择使用mysql,mysqli或PDO。

如果你只是在寻找一个关系数据库,你需要看看MySQL,尽管有很多选择。

答案 4 :(得分:0)

RE:“我应该使用持久连接”

没有。如果您的数据库“很重”,持久连接将无法提供帮助 - 实际上,它们可能会妨碍PHP脚本在处理数据时长时间保持打开状态。持久连接只能加快连接到数据库的时间IN SOME CIRCUMSTANCES。您可以为每个脚本运行节省几毫秒,但除非您仔细阅读,否则您将失去更多运行清理功能以释放锁定或事务。因此,除非你有很多非常非常短的脚本得到简短的数据库连接,然后继续前进,或者数据库服务器距离网络服务器很远,所以不要在这一点上出汗。

PDO已在其他答案中提出,所以我已将它们标记为最适合您。