2013-07-22 2 views
0

У меня есть PHP-сайт в индексном файле включают подключение к БД функции:Оптимизация подключения к MySQL

function connect(){ 
mysql_connect("localhost", "user", "pass") or die(mysql_error()); 
mysql_select_db("database"); 
} 

и я использую эту функцию в везде мне нужно подключение

, например:

<?php 
connect(); 
$lastnews_sql = mysql_query("SELECT text,time FROM small WHERE active='0' ORDER BY time DESC LIMIT 10"); 
if(mysql_num_rows($lastnews_sql)) { 
    while($Result123 = mysql_fetch_object($lastnews_sql)) { 
?> 

и используйте этот выбор: текст; ?>

в конце использования:

<?php 
} 
} 
mysql_close(); 
?> 

есть более чем 10 Connect(); и mysql_close(); в индексном файле

так что есть слишком много ошибок соединения в файле индекса

как я могу оптимизировать этот Metod?

+0

создать одноэлементный объект/или шаблон реестра и сохранить связь там. и читать при необходимости – DevZer0

+0

Подробнее об этом здесь: http://programmers.stackexchange.com/questions/171300/db-object-passing-between-classes-singleton-static-or-other –

+0

Остановить использование 'mysql'-функций , они скоро будут устаревшими! Вместо этого используйте mysqli или PDO. – Pieter

ответ

1

Одноэлементный образец, похоже, подходит для этого на землю.

class Database 
{ 
    private static $instance; 

    public function getInstance() 
    { 
     if(self::$instance == null) 
     { 
      // Create a connection to the database. 
      // NOTE: Use PDO or mysqli. mysql is deprecated. 
     } 
     return self::$instance; 
    } 
} 

Использование

В классах, вместо вызова connect, предполагая, что вы используете PDO объект, вы могли бы сделать что-то вроде:

$db = Database::getInstance(); 
$statement = $db->prepare("SELECT * FROM tblName WHERE val = :val"); 
$statement->bindParam(":val", $value); 
$statement->execute(); 
$result = $statement->fetchAll(); 

Почему этот шаблон?

Шаблон Singleton имеет то преимущество, что один экземпляр сам по себе существует за один раз. Это означает, что вы только создадите одно соединение с базой данных.

установка этой

Итак, первое, что вы хотите сделать, это создать новый файл, назовем его Database.php. Внутри Database.php вы хотите написать код, который я написал, только NOTmysql_*. Посмотрите на PDO учебник, который я представил, о том, как подключиться к базе данных с использованием PDO объекта, а затем поместить этот код соединения внутри if statement, так что это может выглядеть примерно так:

 if(self::$instance == null) 
    { 
     self::$instance = new PDO('mssql:host=sqlserver;dbname=database', 'username', 'password'); 
    } 

Тогда , чтобы использовать его в другом классе, поставьте оператор require вверху. Что-то вроде:

require_once('Database.php'); 

Наконец, посмотрите на код, который я поставил в разделе use выше. Так вы используете его в своем классе.

Полезные ссылки

PDO Учебник: http://php.net/manual/en/book.pdo.php
Singleton Pattern: http://www.oodesign.com/singleton-pattern.html

+0

i am beginner Можете ли вы описать и сказать мне, как я могу заменить этот код моим примером кода, который я пишу в вопросе? –

+0

Взгляните на мое редактирование. – christopher

+0

спасибо, можете ли вы заменить код с кодом и val $ statement = $ db-> prepare ("SELECT * FROM tblName WHERE val =: val"); $ statement-> bindParam (": val", $ value); $ statement-> execute(); $ result = $ statement-> fetchAll(); и значение эха –

Смежные вопросы