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 :: Создал класс для работы с бд не судите строго
Покинул форум
Сообщений всего: 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);
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%>"
);
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." ";
$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);
}
}
?>
Stierus
Отправлено: 26 Февраля, 2011 - 00:59:18
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Сейчас, при желании, можно найти дестка три разных классов для работы с БД, разбирая фрэймворки - можно откопать еще пару десятков простеньких ORM ... для чего вы писали свой велосипед, к тому же на много менее качественный, чем в тех же фреймворках?
barty
Отправлено: 26 Февраля, 2011 - 01:01:55
Новичок
Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2011
Помог: 0 раз(а)
если кому интересно могу поделится и другими модулями (Добавление)
дело не в том что велосипед! каждый судит по своему опыту если дорос для фремворка или не дорос например в зенде нет такого (Добавление)
мы же ленивые люди! поэтому я ищу способ оптимизации своего времени
evgenijj
Отправлено: 26 Февраля, 2011 - 01:08:23
Участник
Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006 Откуда: Москва
Помог: 10 раз(а)
Stierus пишет:
для чего вы писали свой велосипед, к тому же на много менее качественный, чем в тех же фреймворках?
Каждый начинающий программист должен изобрести велосипед. Положа руку на сердце -- сам не изобретал? Более чем уверен, что изобретал... А??? И я грешен... А на ком такого "греха" нет? А если на ком такого "греха" нет -- то какой он программист?
Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2011
Помог: 0 раз(а)
Все ясно!!! Каждый кто стих напишет не поэт! так получается!?
Stierus
Отправлено: 26 Февраля, 2011 - 01:24:21
Рекордсмен по количеству сообщений за 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
остальное не осилил, оформи нормально код
grefon
Отправлено: 26 Февраля, 2011 - 01:25:35
Частый посетитель
Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010
Помог: 32 раз(а)
barty, за то, что пришли на этот форум Вам огромное и искреннее спасибо. Еще большее спасибо за то, что начали свое общение и обитание здесь не с банального вопроса "на какую кнопку мне нажать чтобы все стало как надо?", а с того, что поделились своим опытом!
Классов для работы с базами действительно много! Но как по мне то чтобы понять что как и почему работает то сначала нужно это познать, а не тупо брать чужой код и бессмысленно юзать его.
К Вам очень большая просьба: обрамляйте код в спецтеги при добавлении поста!
----- ____________________________________________________________________
Ну как то так, наверное. http://grefon[dot]com
Stierus
Отправлено: 26 Февраля, 2011 - 01:25:37
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Цитата:
Все ясно!!! Каждый кто стих напишет не поэт! так получается!?
Это ты к чему ? о_О
barty
Отправлено: 26 Февраля, 2011 - 01:28:16
Новичок
Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2011
Помог: 0 раз(а)
Stierus пишет:
Цитата:
Все ясно!!! Каждый кто стих напишет не поэт! так получается!?
Это ты к чему ? о_О
к тому что программист это творческое существо а зарубать на корню его не стоит
Stierus
Отправлено: 26 Февраля, 2011 - 01:30:27
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Цитата:
к тому что программист это творческое существо
Программист - это мыслящее, анализирующее и сравнивающее существо ... к тому же очень любознательное
barty
Отправлено: 26 Февраля, 2011 - 01:32:42
Новичок
Покинул форум
Сообщений всего: 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
даже класс::метод не рабтает поэтому пишу проще чтоб переделать можно было быстро и легко!
Stierus
Отправлено: 26 Февраля, 2011 - 01:35:43
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
php5 вышел в 2005 году, сейчас 2011, ты хочешь сказать, что где-то остались php4 ?
barty
Отправлено: 26 Февраля, 2011 - 01:39:18
Новичок
Покинул форум
Сообщений всего: 12
Дата рег-ции: Февр. 2011
Помог: 0 раз(а)
Stierus пишет:
php5 вышел в 2005 году, сейчас 2011, ты хочешь сказать, что где-то остались php4 ?
besthost24.ru в краноярске http://q75[dot]net/ тоже самое сам не рад этому (Добавление)
barty пишет:
Stierus пишет:
php5 вышел в 2005 году, сейчас 2011, ты хочешь сказать, что где-то остались php4 ?
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.