Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Создал класс для работы с бд не судите строго

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
barty
Отправлено: 26 Февраля, 2011 - 00:55:08
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




<?php
class obj_db
{
var $error_reporting =2047;//2047;

var $db_server="localhost";

var $db="tav";

var $db_user="root";

var $db_password="";

var $write_sql_log =true;

var $sql_log_file ="sql_log.txt";



const msg_no_connect="нет соединения.<br>";

const msg_no_db="нет базы данных.<br>";

function obj_db()
{
$this->connect();
$this->select_db();
}

function connect()
{
error_reporting($this->error_reporting);
$connect = mysql_connect($this->db_server,$this->db_user,$this->db_password);
if ($connect) return $connect;
else
echo obj_db::msg_no_connect;
}

function select_db()
{
error_reporting($this->error_reporting);
$select_db = mysql_select_db($this->db);
if ($select_db) return $select_db;
else
echo obj_db::msg_no_db;
}

function write_sql_log($sql)
{
if ($this->write_sql_log)
{
$ip = getenv ("REMOTE_ADDR");
$date=date("Y-m-d");
$time=date("H")."-".date("i");
$handle = fopen($this->sql_log_file, "a");
fwrite($handle,"IP:$ip, дата на сервере:$date, время на сервере: $time, запрос: $sql;\n");
fclose($handle);
//$sql_insert="insert into ".sql_monitor::table_sql_monitor." (date,sql_text,ip) values('$date','$sql','$ip')";
}

}

function mysql_query_ex($sql,$echo=false)
{
if ($echo)echo "запрос: ".$sql."<br>";
$this->write_sql_log($sql);
return mysql_query($sql);

}

}

/*$db = new obj_db;
$db -> connect();
$db -> select_db();
$db ->mysql_query_ex("select**", 1);
*/
?>

<?php
class obj_db_table extends obj_db
{

var $table = "";
var $field_name_as_key_and_rus_name_as_value= array();
/*
$field_name_as_key_and_rus_name_as_value[field]]="поле":"русское название для отображения в веб"
*/
var $define_default_field_value_for_view = array("delimiter"=>","/*delimiter*/);
/*
$define_default_field_value_for_view[]="field:[field_value1:view1],[field_value2:view2]"
*/
var $update_field_as_key_and_update_value_as_value=array();
var $insert_field_as_key_and_insert_value_as_value=array();

var $id_field="";

var $query_type = array
(
"select"=>"select <%fields%> from <%table%> <%where%> <%order%> <%limit%>",
"delete"=>"delete from <%table%> <%where%>",
"insert"=>"insert into <%table%> <%fields values%>",
"update"=>"update <%table%> set <%fields=values%> <%where%>"
);

var $query = array
(
"type"=>"",
"query_string"=>"",
"return"=>"",
"record_count"=>0,
"field_count"=>0,
"rarray"=>array()
);

var $where = "";

var $order = "";

var $limit = "";


function fields_to_query_fields($type)
{
$result="";
switch ($type)
{
case "select":
$fields=array_keys($this->field_name_as_key_and_rus_name_as_value);
$fcount= count($fields);
foreach($fields as $key=>$value)
{
if ($fcount-1!=$key)
$result.=$value.", " ;
else
$result.=$value." " ;
}
break;

;

case "delete": $result="";
break;
case "insert":
$fields=array_keys($this->insert_field_as_key_and_insert_value_as_value);
$values=array_values($this->insert_field_as_key_and_insert_value_as_value);
$result.="(";
$fcount= count($fields);
foreach($fields as $key=>$value)
{
if ($fcount-1!=$key)
$result.=$value."," ;
else
$result.=$value ;
}
$result.=") values (";
foreach($values as $key=>$value)
{
if ($fcount-1!=$key)
$result.="'".$value."'," ;
else
$result.="'".$value."') " ;
};
break;
case "update": $update_fields = array_keys($this->update_field_as_key_and_update_value_as_value);
$update_values = array_values($this->update_field_as_key_and_update_value_as_value);
$fcount = count($update_fields);
foreach($update_fields as $key=>$values)
{
if ($fcount-1!=$key)
$result.=$update_fields[$key]."='".$update_values[$key]."'".", " ;
else
$result.=$update_fields[$key]."='".$update_values[$key]."'" ;
}
break;
}
return $result;


}

function query($type="select")
{
$sql = $this->query_type[$type];
$where="";
$order="";
$limit="";
if ($this->where!="")
$where = " where ".$this->where." ";
if ($this->order!="")
$order = " order by ".$this->order." ";
if ($this->limit!="")
$limit = " limit ".$this->limit." ";


$result="";
switch ($type) {
case "select":
$sql = str_replace("<%fields%>",$this->fields_to_query_fields($type),$sql);
$sql = str_replace("<%table%>",$this->table,$sql);
$sql = str_replace("<%where%>",$where,$sql);
$sql = str_replace("<%order%>",$order,$sql);
$sql = str_replace("<%limit%>",$limit,$sql);
break;
case "delete":
$sql = str_replace("<%table%>",$this->table,$sql);
$sql = str_replace("<%where%>",$where,$sql);
break;
case "insert":
$sql = str_replace("<%fields values%>",$this->fields_to_query_fields($type),$sql);
$sql = str_replace("<%table%>",$this->table,$sql);
break;
case "update":
$sql = str_replace("<%fields=values%>",$this->fields_to_query_fields($type),$sql);
$sql = str_replace("<%table%>",$this->table,$sql);
$sql = str_replace("<%where%>",$where,$sql);
break;
}
;

$this->query['type']=$type;
$this->query['query_string']=$sql;
$this->query['return']=$this->mysql_query_ex($sql);
error_reporting($this->error_reporting);
$this->query['record_count']=mysql_num_rows($this->query['return']);
$this->query['field_count']=mysql_num_fields($this->query['return']);
$i=0;
if ($this->query['record_count']!=null)
{
while ( $this->query['rarray'][$i++] = mysql_fetch_assoc($this->query['return']))
{

}

}
var_dump($this->query);
}





}




?>
 
 Top
Stierus Супермодератор
Отправлено: 26 Февраля, 2011 - 00:59:18
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Сейчас, при желании, можно найти дестка три разных классов для работы с БД, разбирая фрэймворки - можно откопать еще пару десятков простеньких ORM ... для чего вы писали свой велосипед, к тому же на много менее качественный, чем в тех же фреймворках?
 
My status
 Top
barty
Отправлено: 26 Февраля, 2011 - 01:01:55
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




если кому интересно могу поделится и другими модулями
(Добавление)
дело не в том что велосипед! каждый судит по своему опыту если дорос для фремворка или не дорос например в зенде нет такого
(Добавление)
мы же ленивые люди! поэтому я ищу способ оптимизации своего времени
 
 Top
evgenijj
Отправлено: 26 Февраля, 2011 - 01:08:23
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Stierus пишет:
для чего вы писали свой велосипед, к тому же на много менее качественный, чем в тех же фреймворках?

Каждый начинающий программист должен изобрести велосипед. Положа руку на сердце -- сам не изобретал? Более чем уверен, что изобретал... А??? И я грешен... А на ком такого "греха" нет? А если на ком такого "греха" нет -- то какой он программист?
 
 Top
barty
Отправлено: 26 Февраля, 2011 - 01:13:24
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




Думаю что программист это в первую очередь творческий человек!!!!!!!!! А эту тему я начал чтоб поделится с моими мыслями
 
 Top
Stierus Супермодератор
Отправлено: 26 Февраля, 2011 - 01:14:45
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




evgenijj, изобрел кучу велосипедов, но среди них нет ни одного для работы с бд - слишком уж много готовых решений - только поэтому и спросил.

(Отредактировано автором: 26 Февраля, 2011 - 01:15:27)

 
My status
 Top
barty
Отправлено: 26 Февраля, 2011 - 01:18:02
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




Все ясно!!! Каждый кто стих напишет не поэт! так получается!?
 
 Top
Stierus Супермодератор
Отправлено: 26 Февраля, 2011 - 01:24:21
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Если хочешь замечаний для развития:
1. obj_db::msg_no_connect; замени на self::msg_no_connect
2. mysql_query_ex($sql,$echo=false) это должно лечь на дебаг, негоже передавать параметром в функцию подобные вещи
3. Привыкай избавляться от echo внутри функций ... тут должно быть только return и throw
4. var $table = ""; привыкай объявлять уровень доступа private, public, protected

остальное не осилил, оформи нормально код
 
My status
 Top
grefon
Отправлено: 26 Февраля, 2011 - 01:25:35
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010  


Помог: 32 раз(а)




barty, за то, что пришли на этот форум Вам огромное и искреннее спасибо. Еще большее спасибо за то, что начали свое общение и обитание здесь не с банального вопроса "на какую кнопку мне нажать чтобы все стало как надо?", а с того, что поделились своим опытом!
Классов для работы с базами действительно много! Но как по мне то чтобы понять что как и почему работает то сначала нужно это познать, а не тупо брать чужой код и бессмысленно юзать его.

К Вам очень большая просьба: обрамляйте код в спецтеги при добавлении поста!


-----
____________________________________________________________________
Ну как то так, наверное.
http://grefon[dot]com
 
 Top
Stierus Супермодератор
Отправлено: 26 Февраля, 2011 - 01:25:37
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Цитата:
Все ясно!!! Каждый кто стих напишет не поэт! так получается!?
Это ты к чему ? о_О
 
My status
 Top
barty
Отправлено: 26 Февраля, 2011 - 01:28:16
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




Stierus пишет:
Цитата:
Все ясно!!! Каждый кто стих напишет не поэт! так получается!?
Это ты к чему ? о_О
к тому что программист это творческое существо а зарубать на корню его не стоит
 
 Top
Stierus Супермодератор
Отправлено: 26 Февраля, 2011 - 01:30:27
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




Цитата:
к тому что программист это творческое существо
Программист - это мыслящее, анализирующее и сравнивающее существо ... к тому же очень любознательное
 
My status
 Top
barty
Отправлено: 26 Февраля, 2011 - 01:32:42
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




Stierus пишет:
Если хочешь замечаний для развития:
1. obj_db::msg_no_connect; замени на self::msg_no_connect
2. mysql_query_ex($sql,$echo=false) это должно лечь на дебаг, негоже передавать параметром в функцию подобные вещи
3. Привыкай избавляться от echo внутри функций ... тут должно быть только return и throw
4. var $table = ""; привыкай объявлять уровень доступа private, public, protected

остальное не осилил, оформи нормально код

друг не на всех серваках стоит php 5
(Добавление)
barty пишет:
Stierus пишет:
Если хочешь замечаний для развития:
1. obj_db::msg_no_connect; замени на self::msg_no_connect
2. mysql_query_ex($sql,$echo=false) это должно лечь на дебаг, негоже передавать параметром в функцию подобные вещи
3. Привыкай избавляться от echo внутри функций ... тут должно быть только return и throw
4. var $table = ""; привыкай объявлять уровень доступа private, public, protected

остальное не осилил, оформи нормально код

друг не на всех серваках стоит php 5

даже класс::метод не рабтает поэтому пишу проще чтоб переделать можно было быстро и легко!
 
 Top
Stierus Супермодератор
Отправлено: 26 Февраля, 2011 - 01:35:43
Post Id



Рекордсмен по количеству сообщений за 7 дней


Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008  
Откуда: Москваль


Помог: 52 раз(а)




php5 вышел в 2005 году, сейчас 2011, ты хочешь сказать, что где-то остались php4 ?
 
My status
 Top
barty
Отправлено: 26 Февраля, 2011 - 01:39:18
Post Id


Новичок


Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2011  


Помог: 0 раз(а)




Stierus пишет:
php5 вышел в 2005 году, сейчас 2011, ты хочешь сказать, что где-то остались php4 ?

besthost24.ru в краноярске http://q75[dot]net/ тоже самое сам не рад этому
(Добавление)
barty пишет:
Stierus пишет:
php5 вышел в 2005 году, сейчас 2011, ты хочешь сказать, что где-то остались php4 ?

besthost24.ru в краноярске http://q75[dot]net/ тоже самое сам не рад этому

там видимо людям не интересно что и как консерванты!!
(Добавление)
а как вы сказали private and public это оч хорошо но вот ни везде работает!!!
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Наработки по собственным проектам »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB