Ulf Wendel

2008/07/03
by admin
4 Comments

PDO: Learn how the PDO SQL parser causes bug reports

The PDO SQL parser causes many bugs. All drivers suffer from it. By default the parser replaces placeholder with '<bound_value>'.'<bound_value>' is a string. This can clash with the SQL syntax. PDO can make an INSERT fail. Please learn why and stop reporting bogus bugs.

Why does PDO parse my SQL commands?

PDO has chosen Prepared Statements as its preferred way of running database queries. The entire API is build around prepared statements. Wez has explained that primarily security considerations have caused this decision. Read PDO_MYSQLND: Prepared Statements, again for a discussion of prepared statements in the context of PDO.

Not every database system supports prepared statements. And those who do use a different syntax for placeholder. Some systems support named parameters (SELECT * FROM test WHERE id = :name), some support positional/ordinal parameter (SELECT * FROM test WHERE id = ?) and some support both. The cause of the differences is the lack of a standard. PDO tries to hide the differences from the user. This is done by a prepared statement emulation. The emulation includes a SQL parser which allows you to use whatever format you prefer for placeholder. If the underlying database system does not support the placeholder format you have chosen, PDO emulates it for you.

In many cases the emulation works flawless. But the bug databases on bugs.php.net and pecl.php.net show plenty of reports that boil down to the PDO SQL parser. Please learn how the SQL parser works. This should help avoiding duplicates in the bug database.

Continue Reading →

2008/07/03
by admin
3 Comments

PDO_MYSQLND: Calling Stored Procedures works fine with mysqlnd

Mike is asking I`m hoping that MySQL stored procedures will work properly. Especially multiple calls in one request. in reply to PDO_MYSQLND: R[a|u]mbling and a breeze of progress. Mike, it depends what you mean by "properly". If you use the API properly it works fine with mysqlnd. Read on for code examples.

  mysqlnd libmysql
  Emulated PS Native PS Emulated PS Native PS
buffered fetch PASS PASS PASS* PASS*
unbuffered fetch PASS PASS PASS* PASS*
  * See below!

Executing a basic stored procedure twice

Code take from the internal test pdo_mysql_attr_oracle_nulls.phpt. Status: PASS. NOTE the use of $stmt->nextRowset(). If you do not call $stmt->nextRowset() in a loop to fetch all result sets you will get the usual 2014 error. MySQLs Stored Procedures always return n (here: 1) result sets for the actual data followed by another result set with the status code. You must use PDOStatement::nextRowset() to fetch them.

Continue Reading →

2008/07/02
by admin
2 Comments

PDO_MYSQLND: R[a|u]mbling and a breeze of progress

The modification of PDO_MYSQL to support the MySQL native driver for PHP (mysqlnd) is progressing. We are using the project title “PDO_MYSQLND” for the modification. The goal of PDO_MYSQLND is to provide a PDO driver for MySQL which can be compiled either against the MySQL Client Library or against the MySQL native driver for PHP. This is the same type of modification we did with ext/mysql and ext/mysqli already.

The use of any of the libraries is transparent for the PHP user. You may continue to use the MySQL Client Library, like you do today with PDO_MYSQL, or give mysqlnd a try. The MySQL native driver for PHP (mysqlnd) is easier to compile as its tightly integreated into the PHP internals and ships with PHP as of version PHP 5.3. In case of ext/mysql and ext/mysqli our benchmarks and first user feedback indicates that mysqlnd gives you at least the same performance of libmysql. And sometimes it is faster and more memory efficient. Read below and see my blog archive for more on mysqlnd.

PDO_MYSQLND test results

Finally, the PDO_MYSQLND test results are looking fine. On a 64bit Linux box PDO_MYSQLND compiled against mysqlnd passes 98.8% of the tests and the code coverage is above 90%. When compiled against libmysql, the results are a little worse: 97.7%. In case of mysqlnd, the remaining 1.2% test failures are PDO (not driver) bugs. We are making use of the new --XFAIL-- feature of the PHP test tool run-tests.php to mark them as expected failures as long as we do not have the time to fix PDO itself as we need to finish our driver itself.

Continue Reading →

2008/06/25
by admin
9 Comments

PDO_MYSQLND: Prepared Statements, again

Server-side Prepared Statements are an outdated technology from ancient times, are they? Brian gives a long list of arguments in his blog posting “Prepared Statements, Musings” why one should think twice before using server-side prepared statements. PDO does enforce the use of prepared statements for all statements which return a result set. Good or bad?

Continue Reading →

2008/06/17
by admin
1 Comment

Unser neues Knattert: Duo 4/1!

Jetzt ist es endlich sicher. Sie sitzt im Flieger auf dem Rückflug vom Kurzurlaub. Ich kann endlich über unser neues Knattert bloggen ohne den Überraschungseffekt aufs Spiel zu setzen. Seit nunmehr zehn Tagen möchte ich es in die Welt rausrufen und fiebere auf den Moment hin an dem Steffi das Knattert zum ersten Mal zu sehen, hören und riechen bekommt. Ein Simson Duo 4/1 spricht einfach alle Sinne an! Typisch für einen 2-Takter mit Baujahr 1978. Ich scheine irgendwie immer bei diesem Baujahr zu landen. Meine Gummikuh, eine BMW R80/7, die leider nach einem Ventilabriß bei Tempo 100 nur noch als Organspender diente, stammte auch aus dem Baujahr.

Der Vorbesitzer mochte sich kaum vom Duo trennen. Er hat es, als passionierter Hobbyschrauber, aus einem rollenden Teilelager vor drei Jahren wieder aufgebaut. Dadurch zeigt es eine gute Substanz. Bei der ersten Durchsicht sind nur ein fehlender Außenspiegel, ein falsch montierter Auspuff – möglicherweise die Ursache fehlender Leistung – , ein defektes Standlicht und das Fehlen der Scheibenwaschanlage aufgefallen. Es tut sich etwas schwer beim Kaltstart, fuhr den Vorbesitzer jedoch lange Zeit treu zur Arbeit und hat die ersten 100km nach einjähriger Pause klaglos gemeistert. Einzig der für die Lackierung verwendete Kunstharzlack wurmt mich etwas, weil dies eine (professionelle) Lackierung mit 2-K Lacken verhindert. Ja, richtig erkannt, ich habe ein neues Spielzeug… – und ich habe bereits rausgefunden, daß es in Kiel eine Simson-Szene gibt.

Vielleicht wird es ja als 78er-Familienmitglied genehmigt und begleitet uns ein paar Jahre. Es kommt zwar nicht wie eine Ape oder ein Fiat 500 aus Italien, aber eine zweisitzige Ape ist ebenso unbezahlbar wie ein gut restaurierter Fiat 500.

Nachtrag (19.06.2008): Das Knattert wurde angenommen. Zur Kennzeichnung seiner Vollwertigkeit hat eine nette Politesse ihm sein erstes Knöllchen verpasst wegen Parkens ohne Parkschein. Knattert, jetzt bist Du der Stadt Kiel vorgestellt worden.

2008/05/08
by admin
3 Comments

PHP: PDO_MYSQLND 1.0.2-alpha released

I am glad to announce the availability of the first alpha version of PDO_MYSQLND. PDO_MYSQLND is a PHP PDO driver for MySQL based on the MySQL native driver. PDO_MYSQLND 1.0.2-alpha is available for download on http://downloads.mysql.com/forge/pdo_mysqlnd_preview. Please read the announcement and check the MySQL Forge project page on PDO_MYSQLND for further information.

What is PDO_MYSQLND?

PDO (PHP Data Objects) is a data-access abstraction layer for PHP. PDO consists of a core and a rich set of database specific drivers. Traditionally there has been one PDO driver for MySQL called PDO_MYSQL. PDO_MYSQL is a community developed and community driven PDO driver. PDO_MYSQLND is a new PDO driver for MySQL based on it. PDO_MYSQLND is developed by MySQL and will be maintained by MySQL.

Continue Reading →

2008/04/28
by admin
Comments Off on Gehört die Unconference zum Establishment?

Gehört die Unconference zum Establishment?

Die zweite Ausgabe der PHP-Unconference in Hamburg am Wochenende (26./27. April 2008) übertraf die kühnsten Erwartungen.

Auf dem Rückweg vom ersten PHP Vikinger im Sommer 2006 durfte ich Darren Cooper (PHP UG Frankfurt) kennenlernen. Wir verbrachten einen wunderbaren Nachmittag in Oslo bei strahlendem Sonnenschein und sinnierten über Community-Events wie die Vikinger-Unconference und Usergroups. Wir hielten noch einige Wochen Kontakt per E-Mail, verloren uns dann etwas aus den Augen, chatteten gelegentlich mussten uns jedoch zwei Jahres bis zum letzten Wochenende gedulden, bevor wir uns wiedersahen.

Unsere alten Diskussionen und Ideen kann man in sechs Worten zusammenfassen: PHP-Unconference in Hamburg – 2008 und 2009. Die PHP-Unconference Hamburg ist bereits im zweiten Jahr im Establishment angekommen. Es ist dem lokalen Team gelungen 120 Gäste aus dem gesamten Bundesgebiet zu mobilisieren und zu betreuen. In vier Räumen wurden an zwei Tagen über 30 Vorträge gehalten und unzählige Diskussionen in den sinnvoll bemessenen Freiräumen und Pausen durchgeführt. Die Liste der Referenten steht der einer kommerziellen Konferenz nicht nach. Wohl aber der Unkostenbeitrag von 10 Euro. Unter den Referenten waren:

  • … Zend Deutschland
  • … die Väter von ext/session
  • … die Nummer 60 der “100 Most Influential People in IT”
  • … Consultants und Trainer, die pro Minute 5 Euro kosten
  • … zwei Mitglieder der PHP-Group
  • … Gewinner des red dot Design Awards, Designpreis der Bundesrepublik und Nominierte für den Grimme Online Award
  • … und so weiter!

Ich will fast ausrufen und feststellen: Konferenzen haben ausgedient! Dem Organisationsteam und all seinen Helfern ist es gelungen, die Unconference auf das Radar prominenter Sponsoren zu bringen:

  • Mayflower
  • MySQL
  • O’Reilly
  • PACKT Publishing
  • Sektion Eins
  • Soprado

Kommerzielle Konferenzen haben aufgrund ihres ungleich höheren Budgets die Möglichkeit mehr Annehmlichkeiten für die Teilnehmer zu bieten. Aber wer mit dem Anspruch des Konsums an eine Unconference herantritt ist am falschen Platz. Zugeschaut, mitgebaut ist das Motto. Wer schon keinen Vortrag hält, der kann zumindest Freunde und Bekannte bei sich beherbergen. Wer keinen Platz hat für Gäste, der kann Vorträge im Wiki protokollieren oder mit dem im Freundeskreis ausgeliehenen Camcorder die Sessions aufzeichnen.

Manchen kommerziellen Konferenzen gelingt es aufgrund des h¨heren Budgets spannendere Veranstaltungsorte anzubieten. Gerüchten zu Folge ist auch dieser letzte Gedanke, den die zwei Sonnenanbeter aus Oslo nie in die Tat umgesetzt haben, für 2009 im Gespräch.

Wie ich schon letztes Jahr sagte: ich bin ein Fan dieser Veranstaltung, es ist ein Pflicht-Veranstaltung, die Veranstaltung ist hiermit etabliert. Ich wünsche mir, daß das Orga-Team auch nächstes Jahr mit so viel Elan bei der Sache ist. Community Events stehen und fallen mit der Existenz einer Keimzelle, mit dem Vorhandensein eines aktiven Orga-Teams. Danke an das Orga-Team und alle Helfer!

2008/04/16
by admin
Comments Off on PHP: PDO_MYSQLND for PHP preview released

PHP: PDO_MYSQLND for PHP preview released

Minutes ago (when writing this), we have released a first preview version of PDO_MYSQLND for PHP together with the first preview version of MySQL Connector/OpenOffice.org. Minutes ago, both new developments have been announced at the MySQL Conference.

PDO_MYSQLND announcement explained

We will explain you in more detail what both products are about during the next days. Let me start with a brief overview on PDO_MYSQLND and allow me to cite the announcement.

Continue Reading →

2008/04/01
by admin
Comments Off on PHP: ext/mysqli result sets and foreach()

PHP: ext/mysqli result sets and foreach()

What does any developer do during a train trip? Correct, he’s hacking. He’s at least working on bells and whistles such as foreach() support for buffered ext/mysqli result sets in mysqlnd. Thanks Andrey!

$link = mysqli_connect('host', 'user', 'password');
$res = mysqli_query($link, 'SHOW TABLES FROM mysql');
foreach ($res as $row)
  var_dump($row);
mysqli_free_result($res);
mysqli_close($link);

Note: SVN/CVS only, mysqlnd only, buffered result sets only, no way to enforce any other fetch mode but MYSQLI_FETCH_ASSOC – but quite handy anyway.

2008/03/13
by admin
Comments Off on Urlaub… – mit der Sony A700 zum Mittagessen im Vatikan

Urlaub… – mit der Sony A700 zum Mittagessen im Vatikan

Wenn Arbeit negative Auswirkungen hat, dann die, daß man den Urlaubsanfang verpennt. In fester Überzeugung, daß ich heute noch keinen Urlaub habe, begann ich fast pünktlich um 9:15 Uhr meine Arbeit. Warum eigentlich? Der Urlaub hat doch am Vortag begonnen… Ein Urlaub von einer Länge wie ich ihn seit 2005 nicht mehr hatte: nächster Arbeitstag 01.04.2008. Unglaublich! Und diesmal scheint es wirklich ein Urlaub zu werden. Also mit wegfahren, ohne Sorgen und ohne E-Mail für eine ganze Woche!

In weiser Vorraussicht habe ich im Vorfeld meine Konica Minolta Dynax 7D gegen den Nachfolger Sony Alpha A700 ausgetauscht. Zwei Jahre sind in der Digitalfotografie eine unendliche Zeitspanne. Jeder, der noch nicht verstanden hat, daß Sensorhalter sehr schnell veralten, möge auf Ewigkeiten der 7D nachtrauern. Vorbei die Zeiten in denen ein Hammer durch die Kamera ersetzt werden konnte. Was zählt sind die inneren Werte – der Sensor. Vorbei die Zeiten der mechanisch komplizierten Drehknöpfe. Ich mochte sie nie: immer mußte die Kamera vom Auge genommen werden, damit Einstellungen an der 7D vorgenommen werden können.

Leichter, schneller, effizienter und das erste Mal eine echte Bildermaschine – das ist die A700. Der Autofokus erinnert nicht mehr an die nunmehr 9(!) Jahre alte Dynax 800si – die 7D erreichte kaum das Niveau derselben. Der AF ist endlich “hinreichend schnell” und trifft praktisch immer im ersten Versuch. Die Konkurrentin von Nikon soll das ganze noch mal schneller schaffen, aber das ist für den Urlaubsfotografen nicht mehr von Belang. Gleiches gilt für das Rauschverhalten. Anstatt die Grenze bei ISO 400 zu setzen, mache ich mir jetzt keine Sorgen mehr um ISO 1600. Das Ding macht einfach feine Bilder… Es ist mir gleich, daß das neue Sony 16-105 lichtschwächer ist als das gute alte 24-85, 28-105 oder 16-80. Einfach die ISO-Einstellung etwas ändern und gut ist.

Der Zuwachs an Auflösung ist willkommen aber kein Kaufargument. Sony hat die rückwärts gerichtete Bedienungslogik der 7D auf ein zeitgemäßes Niveau gehoben. Gleiches gilt für die übrigen Eigenschaften eines Sensorhalters: AF, ISO-Rauschen, eingebaute Bildverarbeitung (bspw. DRO). Die Kamera hat alle traditionellen Stärken von Minolta erhalten. Der Sucher ist nach wie vor einfach nur Klasse. Und wer außer Sony könnte im nächsten Schritt die Vereinigung von Bewegt- und Standbild schaffen? Vielleicht ist die A700 ein letzter Dinosaurier aber es ist ein hochentwickelter. Umsteigen von der 7D auf die A700? Ja, wenn es das Budget erlaubt! Die Sony A700 gibt mir das gleiche gute Gefühl wie meine Sony DSC-V1 von 2004: achte auf das Bild – die Kamera schafft das locker…

Gute Testberichte zur A700 lassen sich leicht finden. Wenige erwähnen, daß das Sony-Objektivangebot noch eine große Schwäche ist. Gebrauchte Minolta-Objektive erzielen Rekordpreise – 10% Plus gegenüber 2006 sind keine Seltenheit. Wer alle gewünschten Objektive im Sony-Angebot findet, der sollte einsteigen. Die A350 zeigt wohin die Reise geht….

Meine Reise geht nach Rom. Dienstag, 18.03.2008 – Einladung zum Mittagessen im Vatikan. Wie zum – ääh besser nicht -, naja, wie hat sie das jetzt schon wieder organisiert. Und “sie” ist nicht die Kamera…