减少PHP

时间:2016-07-26 14:35:17

标签: php mysql pdo

我在许多PHP文件中使用相同的代码块,有时在同一个PHP文件中(例如,当有if/else时。我知道有更好的方法,但我不太确定要做到这一点。我想用一些东西替换这个大块,但不确定是什么适合。require也许?

$hostname = 'localhost';
$database = 'dev_testing';
$username = 'root';
$password = 'XXXXXX';
$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

3 个答案:

答案 0 :(得分:5)

@maalls和@TahaPaksu的答案很好,但@ marcB的评论甚至更好:通常你只想在每个脚本执行时连接到数据库一次。我不想在dependency injection的方向上向你踢你,但作为一个中间解决方案,我想建议这个类看起来大致像一个单身,但实际上是{ {3}}模式实现(另请参阅Memoization了解其他模式示例)。

无论如何:代码:

gem

在您的脚本中,您可以使用

调用它
class Database() {

  static private $connection = null;

  public static function getConnection() {
    if (static::$connection === null) {
      $hostname = 'localhost';
      $database = 'dev_testing';
      $username = 'root';
      $password = 'XXXXXX';
      $dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
      $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
      $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

      static::$connection = $dbh;
    }

    return static::$connection;
  }
}

您可以根据需要随时调用该行,但只有在第一次调用该脚本时才会连接到数据库。后续调用将返回相同的连接。这将为您的数据库节省相当多的开销。

答案 1 :(得分:3)

创建一个单独的文件(例如" connection.php"),将代码放入其中,并在您需要的任何地方,在代码的开头包含以下内容:

require_once('connection.php');

答案 2 :(得分:3)

你可以使用你在php文件中包含的全局函数:

require_once("db.php");

档案db.php

function db_connect(){
    $hostname = 'localhost';
    $database = 'dev_testing';
    $username = 'root';
    $password = 'XXXXXX';
    $dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $dbh;
}

并在您的文件中:

$dbh = db_connect();
... 
// don't forget to close db before you open a new connection!
$dbh = null;