Я тут навоял немного но что то вылазят ошибки
<?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 не устраивает?
чем PDO не устраивает?
Спустя 4 часа, 43 минуты, 10 секунд (21.12.2011 - 16:57) inpost написал(а):
kent666
Есть свойства, есть методы.
Свойства - инициализация переменных, если можно так выразиться. При этом запрещено выполнять какие-либо действия.
$var = 1; - вот это нормальная форма.
Методы - это фукнции класса. Вот там можно делать действия и выполнять функции.
Есть свойства, есть методы.
Свойства - инициализация переменных, если можно так выразиться. При этом запрещено выполнять какие-либо действия.
$var = 1; - вот это нормальная форма.
Методы - это фукнции класса. Вот там можно делать действия и выполнять функции.
Спустя 27 минут, 24 секунды (21.12.2011 - 17:24) kent666 написал(а):
SlavaFr это все для работы класса работающего с nasted sets Кузьмы Феськова.
Библиотеку ADODB не хочется использовать ради нескольких функций, а потом подстраиваться под нее!
inpost я это уже понял. Просто практики с классами маловато.
Я исправил класса
Библиотеку 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
А ещё, мне кажется, что это глупая вещь, переименовывать просто ради класса стандартные функции. Вот как твой метод FetchRow - это абсурд. Лишние 3 строчки и лишнее действие.
Если уж перешел на ООП, то используй сразу mysqli , а не mysql

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

Спустя 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));
upd. как я понял этот велосипед можно заменить mysql_insert_id()
over 1 - true
так что if(mysql_num_rows($this->res) > 0) можно заменить на if(mysql_num_rows($this->res));
Свернутый текст
до этого здесь был скрипт, в нём ошибка 

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