[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Класс для работы с mysql
kent666
Помогите создать собственный класc для работы с mysql :)
Я тут навоял немного но что то вылазят ошибки
<?php

class
DB
{

/////////////////////////////////////////////////
// PUBLIC
/////////////////////////////////////////////////






/////////////////////////////////////////////////

// PROPERTIES AND PRIVATE
////////////////////////////////////////////////

private $connect = '';

public function __construct($db_host, $db_user, $db_password, $db_base)
{
$this->db_host = $db_host;

$this->db_user = $db_user;

$this->db_password = $db_password;

$this->db_base = $db_base;


}


$this->connect = mysql_connect($this->db_host, $this->db_user, $this->db_password)or die("Нет соединения с базой");

mysql_select_db( $this->db_base, $this->connect) or die("Не выбрана база данных");

$this->mysql_query('SET NAMES utf8');
$this->mysql_query('SET CHARACTER SET utf8');
$this->mysql_query('SET COLLATION_CONNECTION="utf8_general_ci"');

Ошибку выдает на $this->connect = mysql_connect($this->db_host, $this->db_user, $this->db_password)or die("Нет соединения с базой");
И вообще может я в неправильном направлении двигаюсь?



Спустя 30 минут, 2 секунды (21.12.2011 - 11:33) Oyeme написал(а):
Почитайте подробней как создать класс и его как с ним работать.
В данном примере,Вы пишите "код" не в методе.Вам нужно создать метод,после чего вызывать его.

Спустя 1 минута, 8 секунд (21.12.2011 - 11:34) minor написал(а):
Сначала разобрать паттерн Singleton, после от него двигатся дальше.
Если не с можете двигаться дальше по читать книгу использование ооп.

Спустя 8 минут, 31 секунда (21.12.2011 - 11:43) kent666 написал(а):
Понятно!
Т.е. код
    $this->connect = mysql_connect($this->db_host, $this->db_user, $this->db_password)or die("Нет соединения с базой");  

mysql_select_db( $this->db_base, $this->connect) or die("Не выбрана база данных");

$this->mysql_query('SET NAMES utf8');
$this->mysql_query('SET CHARACTER SET utf8');
$this->mysql_query('SET COLLATION_CONNECTION="utf8_general_ci"');

У меня должен находиться в конструкторе)

Спустя 31 минута, 6 секунд (21.12.2011 - 12:14) SlavaFr написал(а):
а зачем свой класс для этого?
чем PDO не устраивает?

Спустя 4 часа, 43 минуты, 10 секунд (21.12.2011 - 16:57) inpost написал(а):
kent666
Есть свойства, есть методы.
Свойства - инициализация переменных, если можно так выразиться. При этом запрещено выполнять какие-либо действия.
$var = 1; - вот это нормальная форма.
Методы - это фукнции класса. Вот там можно делать действия и выполнять функции.

Спустя 27 минут, 24 секунды (21.12.2011 - 17:24) kent666 написал(а):
SlavaFr это все для работы класса работающего с nasted sets Кузьмы Феськова.
Библиотеку ADODB не хочется использовать ради нескольких функций, а потом подстраиваться под нее!
inpost я это уже понял. Просто практики с классами маловато.
Я исправил класса
<?php

class
db
{

/////////////////////////////////////////////////
// PUBLIC
/////////////////////////////////////////////////


/////////////////////////////////////////////////

// PROPERTIES AND PRIVATE
////////////////////////////////////////////////

private $connect = '';

private $error = '';

private $trace = '';

private $head = '';

private $result = '';

private $error_log = '';

private $res = '';

private $sql = '';

private $max = '';



public function __construct($db_host, $db_user, $db_password, $db_base, $svv_root)
{
$this->db_host = $db_host;

$this->db_user = $db_user;

$this->db_password = $db_password;

$this->db_base = $db_base;

$this->svv_root = $svv_root;

/**
* Подключение к базе
*/


$this->connect = mysql_connect($this->db_host, $this->db_user, $this->db_password)or die("Нет соединения с базой");

mysql_select_db( $this->db_base, $this->connect) or die("Не выбрана база данных");

$this->Execute('SET NAMES utf8');

$this->Execute('SET CHARACTER SET utf8');

$this->Execute('SET COLLATION_CONNECTION="utf8_general_ci"');

}

/**
* Функция для запроса к БД MySQL.
*/

public function Execute($sql, $print = false)
{
$this->result = mysql_query($sql, $this->connect);

if($this->result === false || $print)
{

$this->error = mysql_error();

$this->trace = debug_backtrace();

$this->head = $this->error ?'<b style="color:red">MySQL error: </b><br> <b style="color:green">'. $this->error .'</b><br><br>':NULL;

$this->error_log = date("Y-m-d h:i:s") .' '. $this->head .'
<b>Query: </b><br>
<pre><span style="color:#CC0000">'
. $this->trace[0]['args'][0] .'</pre></span><br><br>
<b>File: </b><b style="color:#660099">'
. $this->trace[0]['file'] .'</b><br>
<b>Line: </b><b style="color:#660099">'
. $this->trace[0]['line'] .'</b>';

/**
*
@TODO To clean in release
*/

//-----------------------------
die($this->error_log);
//-----------------------------

file_put_contents($this->svv_root .'log/mysql.log', strip_tags($this->error_log) ."\n\n", FILE_APPEND);
header("HTTP/1.1 404 Not Found");
die(file_get_contents($this->svv_root .'/404.html'));
}
else
{
$recordset = new recordset($this->result, $sql);
return $recordset;
}
}



/**
* функция возвращает переменную, в которой экранированы все спецсимволы
*/

public function escapeString($data)
{
if(is_array($data))
{
$data = array_map("escapeString", $data);
}
else
{
$data = mysql_real_escape_string($data);
}

return $data;
}


/**
* функция возвращает значние id
*/

public function GenID($seqname, $prefix = '')
{
$this->sql = 'SELECT MAX('.$prefix.'id) AS `max` FROM '. $this->escapeString($seqname);

$this->res = $this->Execute($this->sql);

if(mysql_num_rows($this->res) > 0)
{
$this->max = mysql_fetch_assoc($this->res);
return $this->max['max'] + 1;
}
else
{
return 1;
}
}



}



class recordset
{


/**
* Constructor.
*
*
@param resource $recordset
*
@return recordset object
*/

function __construct($recordset, $sql) {
$this->recordset = $recordset;
$this->sql = $sql;
}

/**
* Returns amount of lines in result.
*
*
@return integer
*/

function RecordCount() {
return mysql_num_rows($this->recordset);
}

/**
* Returns the current row
*
@return array
*/

function FetchRow() {
return mysql_fetch_array($this->recordset);
}
}
, но еще не до конца

Спустя 6 минут, 43 секунды (21.12.2011 - 17:31) inpost написал(а):
Для рут адреса можно использовать константу. Константа видна внутри класса, так как это суперглобальная переменная.
А ещё, мне кажется, что это глупая вещь, переименовывать просто ради класса стандартные функции. Вот как твой метод FetchRow - это абсурд. Лишние 3 строчки и лишнее действие.
Если уж перешел на ООП, то используй сразу mysqli , а не mysql smile.gif

Спустя 6 минут, 4 секунды (21.12.2011 - 17:37) kent666 написал(а):
inpost понимаешь здесь проблема в том что есть класс который работает с
nеsted sets. В это классе черт ногу сломит.
Он работает с некоторыми методами библиотеки ADODB.
Вот эти методы мне и надо добавить в свой класс, что бы работал класс дерева каталогов

Спустя 25 минут, 12 секунд (21.12.2011 - 18:02) RCuPeR написал(а):
Цитата (kent666 @ 21.12.2011 - 14:37)
inpost понимаешь здесь проблема в том что есть класс который работает с
nеsted sets. В это классе черт ногу сломит.
Он работает с некоторыми методами библиотеки ADODB.
Вот эти методы мне и надо добавить в свой класс, что бы работал класс дерева каталогов

Был опыт адаптации nеsted sets под Kohana, все довольно просто и понятно, не учитывая некоторых алгоритмов построения запросов в БД.

Спустя 12 минут, 26 секунд (21.12.2011 - 18:15) kent666 написал(а):
ну я делаю сайт не на фреймверке sad.gif

Спустя 3 часа, 13 минут, 29 секунд (21.12.2011 - 21:28) VolDroN написал(а):
а смысл функции GenID?

upd. как я понял этот велосипед можно заменить mysql_insert_id()

over 1 - true
так что if(mysql_num_rows($this->res) > 0) можно заменить на if(mysql_num_rows($this->res));

Свернутый текст
до этого здесь был скрипт, в нём ошибка sad.gif

Спустя 12 часов, 28 минут, 1 секунда (22.12.2011 - 09:56) kent666 написал(а):
VolDroN Все эти методы нужны для работы другого класса!
Если бы не это я бы вообще сделал автоинкрементным поле id и оно само бы добавляло новое значение.
Быстрый ответ:

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