Tach!
Dann verstehe ich insgesamt nicht so recht, daß ich umsteige. Aber vielleicht kommen die Vorteile bei Prepared Statements zum tragen.
Die herkömmliche mysql-Extension wird in Zukunft wegfallen (dauert aber sicher noch ein paaar Jährchen). Prepared Statements sind auf alle Fälle von Vorteil, weil du dir damit das fehlerträchtige Zusammenstückeln von SQL-Code und Werten zu einem Statement sparen kannst.
Und noch eine Frage: Gibts irgendein gescheites Gegenstück zu mysql_num_rows? Ich lese immer wieder, daß $result->rowCount() nicht sauber funktionieren soll?
Wenn du auf der englischen Version des PHP-Handbuchs schaust, ist immer eine Alternative zur herkömmlichen Funktion genannt. In dem Fall ist das rowCount(). Das kann nicht in allen Systemen richtig arbeiten, was aber an der jeweiligen DBMS-API liegt. Das Problem gibt es auch nur bei SELECT. Die Funktion kann die Anzahl erst dann kennen, wenn alle Datensätze vom Server abgeholt worden sind und somit gezählt werden können. Die MySQL-API macht das unbemerkt im Hintergrund beim Query mit. Das Fetchen holt dann nur von diesem Zwischenspeicher. Jedenfalls ist durch das "heimliche" Abholen die Anzahl bekannt und kann sofort geliefert werden, bevor du das Fetchen anfängst. Da andere Systeme das Fetchen vom Server auch erst beim Aufrufen der Fetch-Funktionen durchführen, kann rowCount() die Anzahl nicht gleich sofort liefern, sondern erst nach Abschluss des Fetch-Vorgangs. Deshalb kann man sich auf das Ergebnis der Funktion rowCount() nicht systemübergreifend verlassen - jedenfalls nicht vor dem Fetch-Abschluss.
Das ist jedenfalls meine Erklärung, warum es technisch gesehen teilweise nicht gehen kann. Leider steht im Handbuch nicht, dass die Funktion nach dem Fetchen garantiert die richtige Zahl liefert. Vielleicht ist da ja wirklich kein Zählmechanismus eingebaut und PDO nimmt da nur, was die APIs liefern. Als Alternative ist jedenfalls immer ein SELECT COUNT(*) ... möglich.
dedlfix.