2012-06-19 3 views
0

Можно создать дубликат:
Close mysql connection (PHP)Когда мне нужно закрыть открытое соединение MySQL в моем классе?

Пожалуйста, помогите мне, я не знаю, где добавить mysql_close($db) ;

Смотрите мой код:

<?php 

    class atsilipimai { 

    private $db; 

    public function __construct($host, $user, $password, $db) { 

    $this->db = mysql_connect($host, $user, $password) or die('Couldn\'t connect to mysql'); 
    mysql_select_db($db) or die('Couldn\'t connect to db'); 
    } 

    public function addPost() { 
    if (isset($_POST['submit'])) { 
      $this->name = mysql_real_escape_string(addslashes($_POST['name'])); 
      $this->msg = mysql_real_escape_string(addslashes($_POST['msg'])); 
      $this->date = date("Y-m-d H:i:s"); 



      if (empty($this->name) || empty($this->msg)) { 
       echo "<p>Please enter all details!</p>"; 
      } else { 
       $sql = "INSERT INTO atsiliepimai (name, msg, date)"; 
       $sql .= " VALUES ('$this->name', '$this->msg', '$this->date')"; 
       mysql_query($sql) or die(mysql_error()); 

      } 
     } 
    } 

    public function showPost() { 
     //I'm not adding pagination, so it will only show last 5 posts. 
     $sql = 'SELECT * FROM atsiliepimai ORDER BY id DESC LIMIT 5'; 
     $query = mysql_query($sql) or die('Couldn\'t get posts from database'); 
     while ($row = mysql_fetch_array($query)) { 
      $this->name = htmlentities(stripslashes($row['name'])); 
      $this->msg = htmlentities(stripslashes($row['msg'])); 
      $this->date = htmlentities(stripslashes($row['date'])); 


      //Just add div's or what you want for the output. 
      //Ip wont be added. 
      echo " 
      <h4>".$this->name."</h4> 
      <p>".$this->msg."</p> 
      <p class = 'data' >".$this->date."</p> 
      <hr /> 
      "; 

     } 

    } 

    public function __destruct() { 



    } 

    } 
?> 
+0

Хорошо, вы должны держать соединение открытым до тех пор, пока все запросы не будут завершены, а затем закройте его, на конце страницы. Вы также можете посмотреть пул соединений с базой данных. –

+1

'mysql' устарел. Вы должны использовать 'PDO_MySQL' или' MySQLi' – KingCrunch

+0

Забудьте о 'mysql_close()' и переключитесь на MySQLi или PDO. – MrCode

ответ

1

С ручной mysql_close

Использование mysql_close() обычно не требуется, так как непостоянные открытые ссылки автоматически закрываются в конце выполнения скрипта.

Так что вам не нужно закрывать его, если у вас нет особых случаев, необходимых для прекращения соединения, а затем установите эту функцию.

Также используйте mysqli_ * или PDO для взаимодействия с базой данных, как mysql_ * Функция устаревания preocess начал

+0

Спасибо, nemaniau kad cia yra lietuviu;) – Wizard

3

Использование класса не ООП. У вас нет разделения проблем. Вы должны инкапсулировать доступ к базе данных в свой класс, а визуализация также должна быть отделена. Закрытие обработчика соединения DB может быть реализовано в destructor класса DB. Но в вашем решении каждый объект, который работает с БД, будет иметь свой собственный обработчик подключений и будет также применим для рендеринга, поэтому прямо сейчас ваш класс является просто пространством имен ...

1

вы не должны подключитесь к своей базе данных здесь. Вы должны создать класс базы данных, который обрабатывает всю связь с вашей базой данных, открывая (в _construct()) и закрывая (в _destruct()) соединения должны быть выполнены там. Вы просто просто создаете и используете объект указанного класса в любом другом классе, который требует утилит баз данных.

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