@utyfua

Правильно ли так работать с бд?

Добрый день
Прошу раскритиковать такое подключение к бд:
$__sys=array();
{//bd 
$__sys['bd']=array(
	'c'=>new PDO('mysql:host=host;dbname=dbname;charset=utf8', 'username', 'pass'),
	'd_new'=>array(),
	//'d_bd'=>array(),
	'execute'=>'',
	
);
function bd_get_arrays($what='*',$table,$where=false,$where2=false,$order_by=false,$start=false,$limit=false){
	$s_act=false;
	if($what=='-only_ids'){$s_act='only_ids';$what='*';}
	$q=is_object($where)?$where:$GLOBALS['__sys']['bd']['c']->prepare('SELECT '.$what.' FROM '.$table.' WHERE '.($where?$where:'1').
		($order_by?' order by '.$order_by:'').($start?' limit '.$start.($limit?', '.$limit:''):''));
	$q->execute($where2&&is_array($where2)?$where2:null);
	$w=$q->fetchAll();
	if($what=='*'){
		$I=count($w);
		if(!isset($GLOBALS['__sys']['bd']['d_new'][$table]))$GLOBALS['__sys']['bd']['d_new'][$table]=array();
		//if(!isset($GLOBALS['__sys']['bd']['d_new'][$table]))$GLOBALS['__sys']['bd']['d_bd'][$table]=array();
		for($i=0;$i<$I;$i++){
			$GLOBALS['__sys']['bd']['d_new'][$table][$w[$i]['id']]=$w[$i];
			//$GLOBALS['__sys']['bd']['d_bd'][$table][$w[$i]['id']]=$w[$i];
		}
	}
	if($s_act=='only_ids'){
		$r=array();
		$I=count($w);
		for($i=0;$i<$I;$i++){
			$r[]=$w[$i]['id'];
			//$GLOBALS['__sys']['bd']['d_bd'][$table][$w[$i]['id']]=$w[$i];
		}
	}
	return $w;
}
function bd_get_array($what='*',$table,$where=false,$where2=false,$order_by=false){
	if(is_numeric($where)){
		if(isset($GLOBALS['__sys']['bd']['d_new'][$table],$GLOBALS['__sys']['bd']['d_new'][$table][$where]))
			return $GLOBALS['__sys']['bd']['d_new'][$table][$where]; else $where='id='.$where;
	}
	$q=bd_get_arrays($what='*',$table,$where,$where2,$order_by,1);
	return isset($q[0])?$q[0]:false;
}
function bd_set_array($table,$set=false,$where=false,$where2=false,$order_by=false,$start=false,$limit=false){
	if(!$set&&is_array($set)&&!empty($set))return;
	if(!isset($GLOBALS['__sys']['bd']['d_new'][$table])&&$where)
		bd_get_arrays('*',$table,$where,$where2,$order_by,$start,$limit);
	if($where){bd_get_arrays('-only_ids',$table,$where,$where2);
	}else{$w=array_keys($GLOBALS['__sys']['bd']['d_new'][$table]);$I=count($w);}
	$GLOBALS['__sys']['bd']['execute'].='UPDATE `game_marsgame_users` SET ';
	for($i=0;$i<$I;$i++){
		$r=array_keys($set);
		$R=count($r);
		for($ri=0;$ri<$R;$ri++){
			$GLOBALS['__sys']['bd']['d_new'][$table][$w[$i]][$r[$ri]]=$set[$r[$ri]];
			$GLOBALS['__sys']['bd']['execute'].=$r[$ri].'="'.addslashes($set[$r[$ri]]).'"';
		}
	}
	$GLOBALS['__sys']['bd']['execute'].=' WHERE id in('.implode(',',$w).');';
	return;
}
function bd_query($sql){
	$GLOBALS['__sys']['bd']['c']->query($sql);
}
function bd_close(){
	$GLOBALS['__sys']['bd']['c']->query($GLOBALS['__sys']['bd']['execute']);
}
}
  • Вопрос задан
  • 591 просмотр
Решения вопроса 2
@tosha_lol_daaa
Емае, чувак, закинь себе ORM и не парь мозги никому.
Если не хочешь - юзай PDO, выбор не велик.
Ответ написан
Комментировать
trevoga_su
@trevoga_su
Код ужаснейшее говно. И потому, что ты не понимаешь простой вещи - для эффективного использования SQL НЕ НУЖНО писать подобные билдеры. Они не нужны примерно в 70% случаев. SQL сам по себе очень сильный инструмент, человекопонятная нотация. Ты же пишешь код, который в 1000000 раз усложняет использование самого SQL, при этом выхлоп - нулевой.

Посмотри как должна выглядеть обертка под БД - database.phpinfo.su - лаконично и понятно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 6
riot26
@riot26
<:З )~~
Код - говно. Такая критика сойдёт?
Ответ написан
pOmelchenko
@pOmelchenko
php-developer
Зачем так сложно? У меня не такой большой опыт в боевых условиях, но я уже вас ненавижу за такую портянку =(
Ответ написан
Slavenin999
@Slavenin999
программист php/erlang/elixir/js
ООП? ORM? Посмотрите на простейшие примеры реализации работы с бд google.gik-team.com/?q=php+simple+database+class
Ответ написан
Комментировать
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
Вы сами-то хоть можете прочитать что здесь происходит?
Ответ написан
@entermix
Хотел предложить выложить на govnokod.ru, но это уже сделали :D
govnokod.ru/21164

неужели все так печально?

Да, но такое бывает у многих начинающих, особенно если это самоучки. Попробуйте разобрать какие-то готовые проекты для реализации тех, или иных задач. Следуйте правилу "Чем проще код, тем он понятнее и тем легче его сопровождать.", и не забывайте, что возможно в один прекрасный момент сопровождать его придется стороннему человеку, пожалейте его :)

https://habrahabr.ru/post/127874/
Ответ написан
@maxtm
Make money, not job
Этот код писал сварщик третьего разряда что-ли?
Отборнейший говнокод.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект