<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF73%3APHP</id>
		<title>LXF73:PHP - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF73%3APHP"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF73:PHP&amp;action=history"/>
		<updated>2026-05-13T16:14:36Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF73:PHP&amp;diff=4919&amp;oldid=prev</id>
		<title>Yaleks: «LXF73:PHP I» переименована в «LXF73:PHP»: унификация</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF73:PHP&amp;diff=4919&amp;oldid=prev"/>
				<updated>2008-06-30T09:17:56Z</updated>
		
		<summary type="html">&lt;p&gt;«&lt;a href=&quot;/wiki/LXF73:PHP_I&quot; class=&quot;mw-redirect&quot; title=&quot;LXF73:PHP I&quot;&gt;LXF73:PHP I&lt;/a&gt;» переименована в «&lt;a href=&quot;/wiki/LXF73:PHP&quot; title=&quot;LXF73:PHP&quot;&gt;LXF73:PHP&lt;/a&gt;»: унификация&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;Версия 09:17, 30 июня 2008&lt;/td&gt;
			&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Yaleks</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF73:PHP&amp;diff=4916&amp;oldid=prev</id>
		<title>Yaleks: викификация</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF73:PHP&amp;diff=4916&amp;oldid=prev"/>
				<updated>2008-06-30T09:05:10Z</updated>
		
		<summary type="html">&lt;p&gt;викификация&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 09:05, 30 июня 2008&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 6:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 6:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Давным-давно, в журнале, который скорее всего уже собирает пыль где-то на полках, я обещал вам рассказать про&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Давным-давно, в журнале, который скорее всего уже собирает пыль где-то на полках, я обещал вам рассказать про&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;PHP 5.1. большая задержка связана с конкурсом Sudoku &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;–&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;PHP 5.1. большая задержка связана с конкурсом Sudoku &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;мы провели несколько уроков за решением задач, подозрительно&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;мы провели несколько уроков за решением задач, подозрительно&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;похожих на конкурсную. Мне хотелось дать вам преимущество по сравнению с теми сумасшедшими, кто не читает этот учебник. Так что я&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;похожих на конкурсную. Мне хотелось дать вам преимущество по сравнению с теми сумасшедшими, кто не читает этот учебник. Так что я&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;писал на тему конкурса вплоть до самого последнего его дня.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;писал на тему конкурса вплоть до самого последнего его дня.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Как бы то ни было, у меня хорошие &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;новости – &lt;/del&gt;в этой статье мы&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Как бы то ни было, у меня хорошие &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;новости — &lt;/ins&gt;в этой статье мы&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;рассмотрим PHP 5.1, последний релиз PHP 5.x. Это первое крупное&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;рассмотрим PHP 5.1, последний релиз PHP 5.x. Это первое крупное&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;изменение версии PHP5, несмотря на то, что сам он вышел аж 15 лет&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;изменение версии PHP5, несмотря на то, что сам он вышел аж 15 лет&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;назад. Но подождать действительно стоило. Мы получили новые функции, новую скорость и новые расширения, из которых, по моему мнению, самым важным стал &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;PDO – &lt;/del&gt;ещё одна трёхбуквенная аббревиатура,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;назад. Но подождать действительно стоило. Мы получили новые функции, новую скорость и новые расширения, из которых, по моему мнению, самым важным стал &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;PDO — &lt;/ins&gt;ещё одна трёхбуквенная аббревиатура,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;обозначающая объекты данных в PHP (PHP Data Objects).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;обозначающая объекты данных в PHP (PHP Data Objects).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 26:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 26:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;результатов своей работы, чтобы&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;результатов своей работы, чтобы&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;избежать постоянного повторения поиска одного и того же виртуального пути. Так что PHP 5.1 работает быстро, быстрее и ещё быстрее, и&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;избежать постоянного повторения поиска одного и того же виртуального пути. Так что PHP 5.1 работает быстро, быстрее и ещё быстрее, и&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;вам даже не нужно переписывать свои сценарии, чтобы воспользоваться &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;этим – &lt;/del&gt;всё ускорится само собой, как только вы перейдёте на новую&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;вам даже не нужно переписывать свои сценарии, чтобы воспользоваться &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;этим — &lt;/ins&gt;всё ускорится само собой, как только вы перейдёте на новую&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;версию.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;версию.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 35:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 35:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;htmlspecialchars_decode(), и появилась новая потрясающая функция time_sleep_until(), которая прекращает выполнение сценария до&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;htmlspecialchars_decode(), и появилась новая потрясающая функция time_sleep_until(), которая прекращает выполнение сценария до&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;тех пор, пока не наступит определённый момент времени. У некоторых&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;тех пор, пока не наступит определённый момент времени. У некоторых&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;функций добавились новые &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;параметры... &lt;/del&gt;Но оставим пока этот вопрос:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;функций добавились новые &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;параметры… &lt;/ins&gt;Но оставим пока этот вопрос:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;вы же хотите узнать, что такое PDO и почему вы должны им заинтересоваться. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Итак...&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;вы же хотите узнать, что такое PDO и почему вы должны им заинтересоваться. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Итак…&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== что такое Pdo и как с ним бороться ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== что такое Pdo и как с ним бороться ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 42:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 42:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;давным-давно, в LXF48, мы рассматривали, как использовать пакет&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;давным-давно, в LXF48, мы рассматривали, как использовать пакет&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Pear::DB, чтобы создавать независимые от типа сервера баз данных&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Pear::DB, чтобы создавать независимые от типа сервера баз данных&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;PHP-сценарии. Pear::DB добивался этой цели очень простым &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;способом – &lt;/del&gt;заставляя вас писать чистый SQL код и абстрагируясь от вызовов функций для работы с конкретной базой данных, так что вы могли&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;PHP-сценарии. Pear::DB добивался этой цели очень простым &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;способом — &lt;/ins&gt;заставляя вас писать чистый SQL код и абстрагируясь от вызовов функций для работы с конкретной базой данных, так что вы могли&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;поменять сервер с минимальными усилиями. его слабым местом была&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;поменять сервер с минимальными усилиями. его слабым местом была&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;скорость – &lt;/del&gt;Pear::DB сам написан на PHP, и вынужден рассматривать&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;скорость — &lt;/ins&gt;Pear::DB сам написан на PHP, и вынужден рассматривать&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;много условий, чтобы вызвать нужную функцию. PDO разработан для&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;много условий, чтобы вызвать нужную функцию. PDO разработан для&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;того, чтобы забрать у Pear::DB половину &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;работы – &lt;/del&gt;часть, связанную с&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;того, чтобы забрать у Pear::DB половину &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;работы — &lt;/ins&gt;часть, связанную с&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;запросом множества разных баз данных внутри одной &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;функции – &lt;/del&gt;и&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;запросом множества разных баз данных внутри одной &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;функции — &lt;/ins&gt;и&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;переместить её в ядро PHP как написанное на C расширение. Это&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;переместить её в ядро PHP как написанное на C расширение. Это&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;гораздо быстрее, и Pear::DB можно по-прежнему использовать для&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;гораздо быстрее, и Pear::DB можно по-прежнему использовать для&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 60:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 60:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;PDO вызывает её сразу же. Появление PDO не означает конец для&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;PDO вызывает её сразу же. Появление PDO не означает конец для&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Pear::DB, ему ещё предстоит долгая жизнь. Но для тех из нас, кто&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Pear::DB, ему ещё предстоит долгая жизнь. Но для тех из нас, кто&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;просто хотел иметь хороший способ переключаться между расширениями mysql и mysqli, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;PDO – &lt;/del&gt;это лучшее решение.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;просто хотел иметь хороший способ переключаться между расширениями mysql и mysqli, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;PDO — &lt;/ins&gt;это лучшее решение.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Нет смысла говорить про PDO, если не попытаться использовать&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Нет смысла говорить про PDO, если не попытаться использовать&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 68:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 68:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$db = new PDO(“mysql:dbname=filch;host=127.0.0.1”, “lxf”, “r0xx0r5”);&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$db = new PDO(“mysql:dbname=filch;host=127.0.0.1”, “lxf”, “r0xx0r5”);&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;если вы ожидали около пяти строк кода, то я извиняюсь, что разочаровал вас. Это всё, что нужно сделать, чтобы подключиться и приготовиться к выполнению запросов. если вы привыкли вызывать mysql_connect() и mysql_select_db(), то вы заметите, что тут их параметры были объединены в единый &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;“источник данных” &lt;/del&gt;(DSN) в стиле Pear::DB. PDO DSN состоит из нескольких пар параметр=значение, перед&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;если вы ожидали около пяти строк кода, то я извиняюсь, что разочаровал вас. Это всё, что нужно сделать, чтобы подключиться и приготовиться к выполнению запросов. если вы привыкли вызывать mysql_connect() и mysql_select_db(), то вы заметите, что тут их параметры были объединены в единый &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;«источник данных» &lt;/ins&gt;(DSN) в стиле Pear::DB. PDO DSN состоит из нескольких пар параметр=значение, перед&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;которыми стоит тип сервера подключаемой базы данных. В этом примере тип &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;сервера – &lt;/del&gt;mysql, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;filch – &lt;/del&gt;имя нужной базы данных (параметр dbname), 127.0.0.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;1 – &lt;/del&gt;IP адрес сервера (параметр host), lxf &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;–&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;которыми стоит тип сервера подключаемой базы данных. В этом примере тип &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;сервера — &lt;/ins&gt;mysql, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;filch — &lt;/ins&gt;имя нужной базы данных (параметр dbname), 127.0.0.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;1 — &lt;/ins&gt;IP адрес сервера (параметр host), lxf &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;-&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;имя пользователя, а &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;r0xx0r5 – &lt;/del&gt;пароль.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;имя пользователя, а &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;r0xx0r5 — &lt;/ins&gt;пароль.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Вам потребуется установленный PDO-драйвер сервера базы данных, с которой вы хотите работать. В этом примере мы используем&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Вам потребуется установленный PDO-драйвер сервера базы данных, с которой вы хотите работать. В этом примере мы используем&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;драйвер mysql, то есть нам нужно, чтобы PHP был собран с указанием&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;драйвер mysql, то есть нам нужно, чтобы PHP был собран с указанием&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;ключа --with-pdo-mysql. расширение PDO компилируется по умолчанию, так что всё, что вам &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;надо – &lt;/del&gt;это указать базы данных, к которым&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;ключа --with-pdo-mysql. расширение PDO компилируется по умолчанию, так что всё, что вам &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;надо — &lt;/ins&gt;это указать базы данных, к которым&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;вам потребуется доступ. кроме MySQL, существуют драйвера для&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;вам потребуется доступ. кроме MySQL, существуют драйвера для&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;PostgreSQL (--with-pdo-pgsql), Oracle (--with-pdo-oci), и так далее.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;PostgreSQL (--with-pdo-pgsql), Oracle (--with-pdo-oci), и так далее.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 130:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 130:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== обработка ошибок ===&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;=== обработка ошибок ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Последняя вещь, о которой я хочу &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;поговорить – &lt;/del&gt;это обработка ошибок.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Последняя вещь, о которой я хочу &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;поговорить — &lt;/ins&gt;это обработка ошибок.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;PDO, будучи современным расширением PHP, может использовать&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;PDO, будучи современным расширением PHP, может использовать&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;исключения PHP для обработки ошибок, вместо того, чтобы просто&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;исключения PHP для обработки ошибок, вместо того, чтобы просто&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;возвращать необычные значения. По умолчанию используется смесь&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;возвращать необычные значения. По умолчанию используется смесь&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;из двух &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;методов – &lt;/del&gt;серьёзные ошибки (&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;“Неправильный пароль”&lt;/del&gt;) вызывают исключения, а менее важные (&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;“этот &lt;/del&gt;запрос не &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;работает”&lt;/del&gt;) просто&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;из двух &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;методов — &lt;/ins&gt;серьёзные ошибки (&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;«Неправильный пароль»&lt;/ins&gt;) вызывают исключения, а менее важные (&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;«этот &lt;/ins&gt;запрос не &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;работает»&lt;/ins&gt;) просто&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;возвращают false в качестве значения функции. Я не знаю, что предпочитаете вы, а мне больше нравится, когда расширение пользуется&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;возвращают false в качестве значения функции. Я не знаю, что предпочитаете вы, а мне больше нравится, когда расширение пользуется&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;исключениями везде. Я хочу, чтобы любая ошибка вызывала исключение, чёрт побери! к счастью, PDO можно настроить на использование&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;исключениями везде. Я хочу, чтобы любая ошибка вызывала исключение, чёрт побери! к счастью, PDO можно настроить на использование&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Yaleks</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF73:PHP&amp;diff=4915&amp;oldid=prev</id>
		<title>Yaleks: Новая: {{цикл/PHP}}  == PHP объекты данных в версии 5.1 ==  ''Все приходит в своё время для тех, кто умеет ждать. Да, обно...</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF73:PHP&amp;diff=4915&amp;oldid=prev"/>
				<updated>2008-06-30T09:04:39Z</updated>
		
		<summary type="html">&lt;p&gt;Новая: {{цикл/PHP}}  == PHP объекты данных в версии 5.1 ==  &amp;#039;&amp;#039;Все приходит в своё время для тех, кто умеет ждать. Да, обно...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{цикл/PHP}}&lt;br /&gt;
&lt;br /&gt;
== PHP объекты данных в версии 5.1 ==&lt;br /&gt;
&lt;br /&gt;
''Все приходит в своё время для тех, кто умеет ждать. Да, обновление PHP наконец-то произошло! '''Пол Хадсон''' (Paul Hudson) покажет нам его.''&lt;br /&gt;
&lt;br /&gt;
Давным-давно, в журнале, который скорее всего уже собирает пыль где-то на полках, я обещал вам рассказать про&lt;br /&gt;
PHP 5.1. большая задержка связана с конкурсом Sudoku –&lt;br /&gt;
мы провели несколько уроков за решением задач, подозрительно&lt;br /&gt;
похожих на конкурсную. Мне хотелось дать вам преимущество по сравнению с теми сумасшедшими, кто не читает этот учебник. Так что я&lt;br /&gt;
писал на тему конкурса вплоть до самого последнего его дня.&lt;br /&gt;
&lt;br /&gt;
Как бы то ни было, у меня хорошие новости – в этой статье мы&lt;br /&gt;
рассмотрим PHP 5.1, последний релиз PHP 5.x. Это первое крупное&lt;br /&gt;
изменение версии PHP5, несмотря на то, что сам он вышел аж 15 лет&lt;br /&gt;
назад. Но подождать действительно стоило. Мы получили новые функции, новую скорость и новые расширения, из которых, по моему мнению, самым важным стал PDO – ещё одна трёхбуквенная аббревиатура,&lt;br /&gt;
обозначающая объекты данных в PHP (PHP Data Objects).&lt;br /&gt;
&lt;br /&gt;
=== ещё быстрее, чем PHP 5.0 ===&lt;br /&gt;
разработчиками PHP была проделана большая работа по повышению&lt;br /&gt;
скорости работы PHP 5.1 на самом низком уровне. Помимо ускорения&lt;br /&gt;
обычной компиляции и выполнения, были доработаны такие серьёзные&lt;br /&gt;
вещи как оператор switch(), выборка переменных и «магический»&lt;br /&gt;
вызов метода. Функция scandir() теперь работает в десять раз быстрее, функции работы с массивами были серьёзно переработаны для&lt;br /&gt;
повышения производительности, а realpath() теперь имеет кэш&lt;br /&gt;
результатов своей работы, чтобы&lt;br /&gt;
избежать постоянного повторения поиска одного и того же виртуального пути. Так что PHP 5.1 работает быстро, быстрее и ещё быстрее, и&lt;br /&gt;
вам даже не нужно переписывать свои сценарии, чтобы воспользоваться этим – всё ускорится само собой, как только вы перейдёте на новую&lt;br /&gt;
версию.&lt;br /&gt;
&lt;br /&gt;
кроме чистой производительности, вы теперь можете заполучить&lt;br /&gt;
несколько новых функций: array_product() подсчитывает произведение всех элементов массива, array_diff() и array_intersect() теперь&lt;br /&gt;
имеют аналоги для работы с ключами, для htmlspecialchars()&lt;br /&gt;
теперь есть функция обратного преобразования под названием&lt;br /&gt;
htmlspecialchars_decode(), и появилась новая потрясающая функция time_sleep_until(), которая прекращает выполнение сценария до&lt;br /&gt;
тех пор, пока не наступит определённый момент времени. У некоторых&lt;br /&gt;
функций добавились новые параметры... Но оставим пока этот вопрос:&lt;br /&gt;
вы же хотите узнать, что такое PDO и почему вы должны им заинтересоваться. Итак...&lt;br /&gt;
&lt;br /&gt;
=== что такое Pdo и как с ним бороться ===&lt;br /&gt;
[[Изображение:Img 73 77 1.png|350px|thumb|Pear::DB и PDO могут счастливо жить вместе: один преобразует ваш SQL, а другой сводит множество расширений в один набор классов и методов.]]&lt;br /&gt;
давным-давно, в LXF48, мы рассматривали, как использовать пакет&lt;br /&gt;
Pear::DB, чтобы создавать независимые от типа сервера баз данных&lt;br /&gt;
PHP-сценарии. Pear::DB добивался этой цели очень простым способом – заставляя вас писать чистый SQL код и абстрагируясь от вызовов функций для работы с конкретной базой данных, так что вы могли&lt;br /&gt;
поменять сервер с минимальными усилиями. его слабым местом была&lt;br /&gt;
скорость – Pear::DB сам написан на PHP, и вынужден рассматривать&lt;br /&gt;
много условий, чтобы вызвать нужную функцию. PDO разработан для&lt;br /&gt;
того, чтобы забрать у Pear::DB половину работы – часть, связанную с&lt;br /&gt;
запросом множества разных баз данных внутри одной функции – и&lt;br /&gt;
переместить её в ядро PHP как написанное на C расширение. Это&lt;br /&gt;
гораздо быстрее, и Pear::DB можно по-прежнему использовать для&lt;br /&gt;
обработки SQL-кода.&lt;br /&gt;
&lt;br /&gt;
Немного запутались? Попробую объяснить. В PHP 5.0, если вы&lt;br /&gt;
хотели писать SQL так, чтобы он работал с любым сервером баз данных, вы использовали Pear::DB. Pear::DB обрабатывал подключение к&lt;br /&gt;
различным серверам следующим образом: он предоставлял функцию&lt;br /&gt;
вроде query() и заменял её на mysql_query(), pgsql_query() и так&lt;br /&gt;
далее в зависимости от типа сервера. Это работало очень медленно, и&lt;br /&gt;
именно эту часть PDO взяли на себя. Вместо обработке в query() различных условий и вызова правильной функции для этой базы данных,&lt;br /&gt;
PDO вызывает её сразу же. Появление PDO не означает конец для&lt;br /&gt;
Pear::DB, ему ещё предстоит долгая жизнь. Но для тех из нас, кто&lt;br /&gt;
просто хотел иметь хороший способ переключаться между расширениями mysql и mysqli, PDO – это лучшее решение.&lt;br /&gt;
&lt;br /&gt;
Нет смысла говорить про PDO, если не попытаться использовать&lt;br /&gt;
его на практике, вот мы и попытаемся. Наш первый скрипт будет&lt;br /&gt;
выполнять соединение с сервером MySQL под именем пользователя lxf&lt;br /&gt;
и с паролем r0xx0r5, открывать базу данных flich и сохранять соединение для дальнейшего использования.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$db = new PDO(“mysql:dbname=filch;host=127.0.0.1”, “lxf”, “r0xx0r5”);&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
если вы ожидали около пяти строк кода, то я извиняюсь, что разочаровал вас. Это всё, что нужно сделать, чтобы подключиться и приготовиться к выполнению запросов. если вы привыкли вызывать mysql_connect() и mysql_select_db(), то вы заметите, что тут их параметры были объединены в единый “источник данных” (DSN) в стиле Pear::DB. PDO DSN состоит из нескольких пар параметр=значение, перед&lt;br /&gt;
которыми стоит тип сервера подключаемой базы данных. В этом примере тип сервера – mysql, filch – имя нужной базы данных (параметр dbname), 127.0.0.1 – IP адрес сервера (параметр host), lxf –&lt;br /&gt;
имя пользователя, а r0xx0r5 – пароль.&lt;br /&gt;
&lt;br /&gt;
Вам потребуется установленный PDO-драйвер сервера базы данных, с которой вы хотите работать. В этом примере мы используем&lt;br /&gt;
драйвер mysql, то есть нам нужно, чтобы PHP был собран с указанием&lt;br /&gt;
ключа --with-pdo-mysql. расширение PDO компилируется по умолчанию, так что всё, что вам надо – это указать базы данных, к которым&lt;br /&gt;
вам потребуется доступ. кроме MySQL, существуют драйвера для&lt;br /&gt;
PostgreSQL (--with-pdo-pgsql), Oracle (--with-pdo-oci), и так далее.&lt;br /&gt;
&lt;br /&gt;
=== быстрые запросы ===&lt;br /&gt;
{{Врезка&lt;br /&gt;
|Заголовок=Подсказки&lt;br /&gt;
|Содержание=&lt;br /&gt;
* Вы можете использовать в качестве DSN путь к файлу в форме file://path/to/your/file. Внутри этого файла должна содержаться обычная строка с описанием источника данных.&lt;br /&gt;
* Вместо PDO_FETCH_LAZY вы можете использовать PDO_FETCH_ASSOC, чтобы сымитировать работу функции mysql_fetch_assoc().&lt;br /&gt;
* если вы предпочитаете отдельно выполнять запрос и проходить циклом по полученным данным в другом месте сценария, используйте метод fetch() объекта, который возвращается из функции $db-&amp;gt;query().&lt;br /&gt;
* если в Unreal Tournament нажать «Вперёд» четыре раза, ваш адреналин придаст вам дополнительную скорость. бу-га-га-га!&lt;br /&gt;
|Ширина=200px}}&lt;br /&gt;
конечно, наш первый сценарий очень прост, и неудивительно, что его&lt;br /&gt;
можно записать в одну строчку. давайте сделаем что-нибудь посложнее и напишем запрос к базе данных. для этого теста мы создадим&lt;br /&gt;
простенькую табличку ut_results, в которой будем хранить информацию&lt;br /&gt;
о победителях в матчах Unreal Tournament. Чтобы запросить эту таблицу из PHP, нам потребуется следующий код:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($db-&amp;gt;query(“SELECT Winner from ut_results;”) as $row)&lt;br /&gt;
echo $row[“Winner”], “\n”;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
да, только две строчки! если вы провели много дней за написанием циклов обработки mysql_query() и mysql_fetch_assoc(), простите, но PDO использовать гораздо проще. Прелесть этого сценария&lt;br /&gt;
в том, что он сочетает запрос с извлечением полученных данных в одной строчке. Вы можете подумать, что этот скрипт выполняет&lt;br /&gt;
$db-&amp;gt;query() множество раз, но это не так. если хотите убедиться,&lt;br /&gt;
запустите монитор состояния MySQL и выполните команду status, что-бы увидеть число запросов.&lt;br /&gt;
&lt;br /&gt;
Вы можете сделать запрос к базе данных ещё проще, включив так&lt;br /&gt;
называемый «ленивый» режим работы. Тогда вместо считывания каждой строки в виде массива полей вы получите её как объект, у которого&lt;br /&gt;
можно прочитать значения полей как значения его параметров.&lt;br /&gt;
для этого нужно всего лишь передать параметр PDO_FETCh_LAZY в&lt;br /&gt;
функцию $db-&amp;gt;query(), примерно так:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach($db-&amp;gt;query(“SELECT Winner from ut_results;”, PDO_FETCH_LAZY) as $row)&lt;br /&gt;
echo $row-&amp;gt;Winner, “\n”;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
если ваш сервер баз данных поддерживает транзакции, вы можете&lt;br /&gt;
работать с ними из PHP. Вам потребуется MySQL 4.1, PostgreSQL,&lt;br /&gt;
Oracle или другая транзакционная база данных, в противном случае&lt;br /&gt;
команды работы с транзакциями будут просто игнорироваться. для&lt;br /&gt;
начала выполните метод beginTransaction() объекта базы данных, а&lt;br /&gt;
затем выполняйте все запросы, какие хотите, в рамках одной транзакции. если вы не изменяли структуру таблиц, добавляя или удаляя столбцы (некоторые сервера сбрасывают транзакцию в такой ситуации), всё&lt;br /&gt;
будет прекрасно. В конце вам останется вызвать commit() или&lt;br /&gt;
rollBack() в зависимости от того, как всё прошло.&lt;br /&gt;
&lt;br /&gt;
Вот пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$db = new PDO(“mysql:dbname=filch;host=127.0.0.1”, “lxf”,“r0xx0r5”);&lt;br /&gt;
$db-&amp;gt;beginTransaction();&lt;br /&gt;
$db-&amp;gt;query(“INSERT INTO great_bands (Name) VALUES (‘Marillion’);&lt;br /&gt;
// Ой! Мы просто не может позволить записать *это* в таблицу...&lt;br /&gt;
$db-&amp;gt;rollBack();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== обработка ошибок ===&lt;br /&gt;
Последняя вещь, о которой я хочу поговорить – это обработка ошибок.&lt;br /&gt;
PDO, будучи современным расширением PHP, может использовать&lt;br /&gt;
исключения PHP для обработки ошибок, вместо того, чтобы просто&lt;br /&gt;
возвращать необычные значения. По умолчанию используется смесь&lt;br /&gt;
из двух методов – серьёзные ошибки (“Неправильный пароль”) вызывают исключения, а менее важные (“этот запрос не работает”) просто&lt;br /&gt;
возвращают false в качестве значения функции. Я не знаю, что предпочитаете вы, а мне больше нравится, когда расширение пользуется&lt;br /&gt;
исключениями везде. Я хочу, чтобы любая ошибка вызывала исключение, чёрт побери! к счастью, PDO можно настроить на использование&lt;br /&gt;
исключений при любых ошибках с помощью функции setAttribute().&lt;br /&gt;
Посмотрите код:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
try {&lt;br /&gt;
$db = new PDO(“mysql:dbname=filch;host=127.0.0.1”, “lxf”, “r0xx0r5”);&lt;br /&gt;
$db-&amp;gt;setAttribute( PDO_ATTR_ERRMODE, PDO_ERRMODE_EXCEPTION&lt;br /&gt;
);&lt;br /&gt;
try {&lt;br /&gt;
$result = $db-&amp;gt;query(“SELECT Winner from ut_sresults;”,PDO_FETCH_LAZY);&lt;br /&gt;
foreach($result as $row) {&lt;br /&gt;
echo $row-&amp;gt;Winner, “\n”;&lt;br /&gt;
}&lt;br /&gt;
} catch (PDOException $ex) {&lt;br /&gt;
echo “Query failed: {$ex-&amp;gt;getMessage()}\n”;&lt;br /&gt;
}&lt;br /&gt;
} catch (PDOException $ex) {&lt;br /&gt;
echo “Couldn’t connect: {$ex-&amp;gt;getMessage()}\n”;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
При помощи try/catch мы можем обработать два различных типа исключений одного и того же класса&lt;br /&gt;
PDOException: внешний обработчик занимается ошибками при&lt;br /&gt;
подключении к базе, а внутренний обрабатывает ошибки&lt;br /&gt;
выполнения запроса. Проще простого!&lt;/div&gt;</summary>
		<author><name>Yaleks</name></author>	</entry>

	</feed>