<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Fladi Blog &#187; PHP</title>
	<atom:link href="http://www.fladi.de/kategorie/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fladi.de</link>
	<description>Die Welt aus den Augen eines Webmuckel</description>
	<lastBuildDate>Thu, 29 Jul 2010 06:54:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>MySQL Limit Funktion mit Oracle und PHP f&#252;r jqGrid</title>
		<link>http://www.fladi.de/2009/11/13/mysql-limit-funktion-mit-oracle-und-php-fuer-jqgrid/</link>
		<comments>http://www.fladi.de/2009/11/13/mysql-limit-funktion-mit-oracle-und-php-fuer-jqgrid/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 10:29:35 +0000</pubDate>
		<dc:creator>Fladi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.fladi.de/?p=208</guid>
		<description><![CDATA[F&#252;r ein Projekt habe ich gerade mit dem tollen jqgrid-Plugin f&#252;r jQuery gearbeitet. Damit lassen sich recht schnell und einfach Tabellendaten dynamisch darstellen. Das Plugin ist sehr gut dokumentiert und es gibt viele Beispiele. Diese beziehen sich aber i.d.R. auf MySQL. Nun habe ich hier aber eine Oracle Datenbank aus der ich die Daten beziehe. [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p style="text-align: left;">F&#252;r ein Projekt habe ich gerade mit dem tollen <a title="jqGrid jQuery Grid Plugin" href="http://www.trirand.com/blog/">jqgrid</a>-Plugin f&#252;r jQuery gearbeitet. Damit lassen sich recht schnell und einfach Tabellendaten dynamisch darstellen. Das Plugin ist sehr gut dokumentiert und es gibt viele Beispiele. Diese beziehen sich aber i.d.R. auf MySQL. Nun habe ich hier aber eine Oracle Datenbank aus der ich die Daten beziehe.</p>
<p style="text-align: left;">jqGrid zeigt die Daten standardm&#228;ssig &#8220;gepaged&#8221; an, d.h. nur eine bestimmte Anzahl Datens&#228;tze pro Seite. Diese werden dynamisch via Ajax-Request neu gelesen. Da wir aber selbstverst&#228;ndlich nicht immer alle S&#228;tze aus der Datenbank lesen wollen und anschliessend filtern, soll das Query nur die n&#246;tigen S&#228;tze zur&#252;ckliefern.</p>
<p style="text-align: left;">In MySQL ist das einfach mit der <a title="MySQL Limit in PHP" href="http://php.about.com/od/mysqlcommands/g/Limit_sql.htm">Limit-Funktion</a> m&#246;glich. Diese Funktion gibt es so leider in Oracle nicht, weshalb man etwas umst&#228;ndlicher zum Ziel kommen muss. Dazu umfassen wir uns eigentlichs SQL (hier ###select###) zus&#228;tzlich.</p>
<blockquote><p style="text-align: left;">SELECT   *   FROM <br />
 (<br />
 SELECT<br />
 r.*, ROWNUM as row_number <br />
 FROM<br />
 ( ###select### ORDER BY ###sidx### ###sord###) r<br />
 WHERE<br />
 ROWNUM &lt;= :end_row<br />
 )<br />
 WHERE :start_row &lt;= row_number</p>
</blockquote>
<p style="text-align: left;">Da ich meine SQL in diesem Projekt als TXT-Datei einlese habe ich hier 3 Marker die ich anschliessend mit den entsprechenden Werten ersetze um mein tats&#228;chliches Statement zu bekommen.</p>
<blockquote><p style="text-align: left;">$sql = file_get_contents(&#8216;modules/reports/sql/oracle_limit-wrap.sql&#8217;);<br />
 $sql = str_replace(&#8216;###select###&#8217;,$select,$sql);<br />
 $sql = str_replace(&#8216;###sidx###&#8217;,$sidx,$sql);<br />
 $sql = str_replace(&#8216;###sord###&#8217;,$sord,$sql);</p>
</blockquote>
<p style="text-align: left;">###select### / $select ist das SQL mit dem ich die eigentlich gewollten Daten aus der Datenbank ziehe.<br />
 ###sidx### und ###sord### sind die Parameter die von jqGrid beim Update der Ansicht &#252;bergeben werden (Sort-Index und Sort-Order).</p>
<p style="text-align: left;">Bevor wir nun unser neues SQL abschicken m&#252;ssen wir noch :start_row und :end_row ermitteln. Diese sind abh&#228;ngig von den von jqGrid &#252;bergebenen Parametern (<strong>$limit</strong> und <strong>$start</strong>). Sie kommen aus der Berechnung der Gesamts&#228;tze wie es im jqGrid-Beispiel zu sehen ist. <strong>$count</strong> ist hierbei die Gesamtzahl aller S&#228;tze die wir via<em> &#8220;select count(*) &#8230;&#8221;</em> ermittelt haben.</p>
<blockquote><p style="text-align: left;">if( $count &gt; 0 ) { <br />
 $total_pages = ceil($count/$limit); <br />
 } else { <br />
 $total_pages = 0; <br />
 }</p>
<p>if ($page &gt; $total_pages) $page=$total_pages;<br />
 $start = $limit*$page &#8211; $limit+1;<br />
 $end = $start + $limit-1;<br />
 if($start &lt;0) $start = 0;</p>
</blockquote>
<p style="text-align: left;">Nun aber endlich das Query ausf&#252;hren:</p>
<blockquote><p style="text-align: left;">$stmt = oci_parse($conn,$sql);<br />
 oci_bind_by_name($stmt, &#8216;:start_row&#8217;, $start);<br />
 oci_bind_by_name($stmt, &#8216;:end_row&#8217;, $end);    <br />
 oci_execute($stmt);<br />
 $rows_per_page = $limit;    <br />
 ocisetprefetch($stmt, $rows_per_page);</p>
<p>// build result-array<br />
 while ($row = oci_fetch_array($stmt, OCI_ASSOC+OCI_RETURN_NULLS)) {<br />
 $rows[] = $row;                  <br />
 }</p>
</blockquote>
<p style="text-align: left;">Zu beachten ist noch, dass wir in unserem Result-Array pro Datensatz jetzt noch eine zus&#228;tzliches Feld ROW_NUM haben, das wir in PHP oder im jqGrid noch rausfiltern k&#246;nnen.</p>
<p style="text-align: left;"><span style="text-decoration: underline;">Zusammenfassung in einfachen Worten:</span><br />
 Anstelle der LIMIT-Funktion umfassen wir unser SELECT nochmals mit einem zus&#228;tzlichen SQL und &#252;bergeben diese die Limit-Parameter.</p>
<p style="text-align: left;">OFFTOPIC: Wie bringe ich WordPress bei Quellcode sch&#246;n darzustellen?</p>

<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.fladi.de/2009/11/13/mysql-limit-funktion-mit-oracle-und-php-fuer-jqgrid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HowTo: PHP-Script per cron ausf&#252;hren</title>
		<link>http://www.fladi.de/2009/10/10/howto-php-script-per-cron-ausfuehren/</link>
		<comments>http://www.fladi.de/2009/10/10/howto-php-script-per-cron-ausfuehren/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 10:22:12 +0000</pubDate>
		<dc:creator>Fladi</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.fladi.de/?p=203</guid>
		<description><![CDATA[Um ein PHP-Script zeitgesteuert auszuf&#252;hren nimmt man unter Linux am besten einen Cronjob. Nun gibt es viele M&#246;glichkeiten das PHP aufzurufen. Als Kommandozeile etwa. Hier ist es aber nicht immer ganz einfach, das auch zum Laufen zu bekommen. Was liegt also n&#228;her als das Script als &#8220;Webseite&#8221; aufzurufen. Alles was man dazu braucht ist der [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p style="text-align: left;">Um ein PHP-Script zeitgesteuert auszuf&#252;hren nimmt man unter Linux am besten einen Cronjob. Nun gibt es viele M&#246;glichkeiten das PHP aufzurufen. Als Kommandozeile etwa. Hier ist es aber nicht immer ganz einfach, das auch zum Laufen zu bekommen. Was liegt also n&#228;her als das Script als &#8220;Webseite&#8221; aufzurufen. Alles was man dazu braucht ist der Lynx-Browser. Dieser textbasierte Browser ist z.B. unter Debian mit einem einfachen &#8220;<em>apt-get install lynx</em>&#8221; schnell installiert.</p>
<p style="text-align: left;">Nun braucht man nur noch die URL unter der das Script normalerweise via Web aufrubar ist. Mit dem Befehl &#8220;<em>crontab -e</em>&#8221; editieren wir unsere Cronjobs. So sieht dann der Eintrag aus um unser Script jede Minute laufen zu lassen:</p>
<blockquote><p style="text-align: left;">* * * * * lynx -dump http://fladi.de/wp-content/upload/scheduler.php &gt;/dev/null 2&gt;&amp;1</p>
</blockquote>
<p style="text-align: left;"><span style="text-decoration: underline;">Erkl&#228;rung:</span><br />
 <strong>* * * * * </strong>- Zeitsteuerung, wann der Job laufen soll (siehe <a title="Cron erkl&#228;rt" href="http://de.wikipedia.org/wiki/Cron">Wikipedia</a>)<br />
 <strong>lynx -dump &lt;adresse&gt;</strong> &#8211; der Aufruf der URL im Browser <br />
 <strong>&gt;/dev/null 2&gt;&amp;1</strong> &#8211; verhindern, dass bei jedem Cron-Aufruf eine Mail gesendet wird</p>
<p style="text-align: left;"> </p>

<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.fladi.de/2009/10/10/howto-php-script-per-cron-ausfuehren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP5 ich komme</title>
		<link>http://www.fladi.de/2009/08/05/php5-ich-komme/</link>
		<comments>http://www.fladi.de/2009/08/05/php5-ich-komme/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 17:21:34 +0000</pubDate>
		<dc:creator>Fladi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[links]]></category>

		<guid isPermaLink="false">http://www.fladi.de/?p=194</guid>
		<description><![CDATA[Seit kurzem besch&#228;ftige ich mich mal wieder etwas intensiver mit PHP. Dann gibt es sicher auch mal hier wieder &#246;fter ein Update, als das in letzter Zeit der Fall war. Als erstes m&#246;chte ich Dir die Seite phphatesme.com ans Herz legen. Seitdem ich etwas tiefer in die Materie einsteige ist das eine der Seiten die [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Seit kurzem besch&#228;ftige ich mich mal wieder etwas intensiver mit PHP. Dann gibt es sicher auch mal hier wieder &#246;fter ein Update, als das in letzter Zeit der Fall war.</p>
<p>Als erstes m&#246;chte ich Dir die Seite <a href="http://www.phphatesme.com">phphatesme.com</a> ans Herz legen. Seitdem ich etwas tiefer in die Materie einsteige ist das eine der Seiten die ich quasi t&#228;glich besuche. Nebenbei hatte die Seite vor kurzem ihren noch jungen ersten Geburtstag. Trotzdem erfreut sie sich gro&#223;er stetig wachsender Beliebtheit, was wohl auf die durchweg gute Qualit&#228;t der Artikel zur&#252;ckzuf&#252;hren ist. Bei den rund 400 Artikeln d&#252;rfte f&#252;r jeden etwas dabei sein.</p>
<p><br class="spacer_" /></p>

<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.fladi.de/2009/08/05/php5-ich-komme/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
