какой же электронный магазин без базы данных? В принципе, можно и без нее, но насколько СУБД облегчает разработку подобных проектов. 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 обязательна!
Оставить комментарий
Вы должны войти, чтобы оставить комментарий.