какой же электронный магазин без базы данных? В принципе, можно и без нее, но насколько СУБД облегчает разработку подобных проектов. PHP поддерживает множество СУБД от xBase до дорогих коммерческих SQL-серверов. Особого внимания заслуживают такие базы, как MySQL (www.tcx.se) и PostgreSQL (www.postgresql.org) - по причине их популярности, хороших характеристик и бесплатности. Легкодоступность СУБД и интерфейса к ней побуждает юные умы применять базу данных направо и налево, не особенно задумываясь о необходимости применения и об алгоритмах работы с базой.

Самая распространенная ошибка авторов скриптов - это отношение к СУБД как к чему-то сверхоперативному. А это вовсе не так. Вот пример, как не надо писать скрипты:

1 pg_pconnect("host=localhost dbname=test");
2 $s1=pg_exec("select a from b");
3 for ($i=0; $i 4 $a=pg_result($s1,$i,0);
5 $s2=pg_exec("select c,x,y,z from d where e=$a");
6 for ($j=0; $j 7 $c=pg_result($s2,$j,0);
8 $x=pg_result($s2,$j,1);
9 $y=pg_result($s2,$j,2);
10 $z=pg_result($s2,$j,3);
11 echo "$c $x $y $z

";
}
}
?> 

1 - надо трижды подумать, прежде чем иcпользовать постоянное соединение с базой. Здесь выбран хост localhost, но работа с локальным сервером через unix socket может быть быстрее.

2 - надо проверить, выполнился ли запрос без ошибок.

3 - нехорошо вызывать функцию в цикле, лучше завести дополнительную переменную $num=pg_numrows($s1).

5 - самая грубая ошибка: запрос в цикле по другому запросу, от такого программирования не спасут ни множество процессоров, ни обилие памяти, ни быстрая дисковая система. Почему бы не решить проблему в один запрос?

$s1=pg_exec("select a,c,x,y,z from b,d where e=a order by a");

В цикле можно запомнить предыдущее значение $a и прерывать цикл при смене этого значения. В любом случае, чем меньше запросов будет к базе, тем лучше - имейте это в виду.

7-10 - можно не вытаскивать поля по одному, а применить функцию pg_fetch_array() или pg_fetch_object(), которые возвращают хэш и объект соответственно с именами полей, соответствующими именам полей результата запроса.

PHP позволяет поддерживать постоянные соединения с СУБД. То есть при завершении скрипта соединение с сервером базы данных разорвано не будет, а будет возобновлено при повторном запросе. Такой метод работы очень экономит время соединения, но съедает системные ресурсы (память, дескрипторы и т. д.). Если у вас один пользователь базы, одна база и один сайт, который непрерывно обращается к базе, то вам стоит попробовать поэкспериментировать. В конфигурации PHP можно глобально отменить постоянные соединения, чем и пользуются провайдеры, чтобы защитить свои хосты от жадных пользователей.

Раз уж мы начали говорить об электронной торговле, то можно развеять еще одно заблуждение, - что MySQL для нее годится. Это не совсем так. Он годится для макета, но не для серьезного сайта. В MySQL нет транзакций. Для сложной базы, для денежных расчетов, для оформления заказов и многих других важных операций транзакции необходимы. Так что используйте PostgreSQL, который все это умеет.

Допустим, магазин вы организовали, заработали кучу денег, давайте теперь продолжим ознакомление с программированием на PHP. Вкратце коснусь других возможностей.



Постоянные ссылки

При копировании ссылка на TeaM RSN обязательна!

URI

Html (ЖЖ)

BB-код (Для форумов)

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.