[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как правильно проверить есть ли соединение с бд
mikolas
добрый день никогда не сталкивался с такой проблемой, сейчас время выполнения скрипта очень большое из-за этого бд в некоторых случаях обрывает соединение, скажите как сделать проверку есть ли соединение или нет что бы делать запрос только с открытым соединением использую вот этот класс
  class sql{
private static $instance;
private $db;

public static function app() {
if (self::$instance == null) {
self::$instance = new self();
}

return self::$instance;
}

private function __construct() {
setlocale(LC_ALL, 'ru_RU.UTF8');
$this->db = new \PDO('mysql:host=' . MYSQL_SERVER . ';dbname=' . MYSQL_DB, MYSQL_USER, MYSQL_PASSWORD);
$this->db->exec('SET NAMES UTF8');
$this->db->setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_ASSOC);
}

public function select($query, $params = array()) {
// echo $query."<br>";
$q = $this->db->prepare($query);
$q->execute($params);

if ($q->errorCode() != \PDO::ERR_NONE) {
$info = $q->errorInfo();
die($info[2]);
}

return $q->fetchAll();
}

public function getByHash($table, $hash_key, $hash_value, $real_key, $real_value){
$q = $this->db->prepare("SELECT * FROM $table WHERE $hash_key=:$hash_key");
$q->execute(array($hash_key => $hash_value));


if ($q->errorCode() != \PDO::ERR_NONE) {
$info = $q->errorInfo();
die($info[2]);
}

while($row = $q->fetch()){
if($row[$real_key] == $real_value)
return $row;
}

return null;
}

public function insert($table, $object, $last=null) {
$columns = array();

foreach ($object as $key => $value) {

$columns[] = $key;
$masks[] = $value;

if ($value === null) {
$object[$key] = 'NULL';
}
}


$columns_s = implode(',', $columns);
$masks_s = "'".implode('\',\'', $masks)."'";

$query = "INSERT INTO $table ($columns_s) VALUES ($masks_s)";

$q = $this->db->prepare($query);
$q->execute($object);

if ($q->errorCode() != \PDO::ERR_NONE) {
$info = $q->errorInfo();
die($info[2]);
}

if($last == true ) {
return $this->lastInsertId();
}
else{
return null ;
}
}

public function lastInsertId(){
$resalt = $this->select("SELECT LAST_INSERT_ID()");

if(isset($resalt[0]['LAST_INSERT_ID()'])){
$resalt = $resalt[0]['LAST_INSERT_ID()'];
}
return $resalt;
}
public function insertMany($table, $object,$last = null,$count=null) {
$columns = array();
$masks2 = array();
$i=1;
foreach ($object as $value) {
$masks = array();
foreach ($value as $key=>$val) {
$masks[] = $val;
if($i==1) {
$columns[] = $key;
}

if ($value === null) {
$object[$key] = 'NULL';
}
}

$masks = implode("','", $masks);
$masks2[]= "('".$masks."')";

$i++;
}

$columns_s = implode('`,`', $columns);

$masks_s = implode(',', $masks2);
//echo $masks_s;

$query = "INSERT IGNORE INTO `$table` (`$columns_s`) VALUES $masks_s";

$this->select($query);
//$q = $this->db->prepare($query);
//$q->execute($object);

//if ($q->errorCode() != \PDO::ERR_NONE) {
// $info = $q->errorInfo();
// die($info[2]);
// }


return $this->lastOrCount($last,$count,$i-1);

}
public function lastOrCount ($last=null,$count=null,$i=null){

if ($count == true and $last == true ){

return $array = array($this->lastInsertId(),$i);

} else if($last == true){

return $this->lastInsertId();
}
if($count == true ) {

return $i;
}
else{
return null ;
}
}


public function update($table, $object, $where, $params = array()) {
$sets = array();

foreach ($object as $key => $value) {

$sets[] = "$key=:$key";

if ($value === NULL) {
$object[$key] = 'NULL';
}
}


$sets_s = implode(',', $sets);
$query = "UPDATE $table SET $sets_s WHERE $where";
///echo $query;exit();
$q = $this->db->prepare($query);
$q->execute(array_merge($object, $params));

if ($q->errorCode() != \PDO::ERR_NONE) {
$info = $q->errorInfo();
die($info[2]);
}

return $q->rowCount();
}

public function delete($table, $where, $params = array()) {
$query = "DELETE FROM $table WHERE $where";
$q = $this->db->prepare($query);
$q->execute($params);

if ($q->errorCode() != \PDO::ERR_NONE) {
$info = $q->errorInfo();
die($info[2]);
}

return $q->rowCount();
}


}
Спасибо
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.