php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.05.2009, 14:19  
Neuer Benutzer
 
Benutzerbild von Sangreal
 
Registriert seit: 08.04.2009
Beiträge: 22
PHP-Kenntnisse:
Fortgeschritten
Sangreal befindet sich auf einem aufstrebenden Ast
Standard Prepared Statements immer einsetzen?

Hallo zusammen,

mit der PHP-Erweiterung MySQLi sind - wie die meistens von euch vermutlich wissen werden - Prepared Statements möglich.
Zur Zeit arbeite ich an einem größeren Projekt, in dem natürlich auch etliche Queries anfallen. Da es noch gar nicht so lange her ist, dass ich von der alten Erweiterung auf MySQLi umgestiegen bin, verzichte ich vor allem bei einfachen Anfragen in der Regel noch auf Prepared Statements, die entsprechenden Variablen werden also einfach "wie früher" in den String eingefügt. Escaped werden kritische Daten bei mir sowieso.
Einzig für komplexere SQL-Statements finde ich Prepared Statements momentan praktischer, da diese dadurch sehr viel übersichtlicher werden.

Ich stelle mir nun allerdings die Frage, ob es Sinn macht, umfassend mit Prepared Statements zu arbeiten. Mich würde deshalb interessieren, in wie weit bei euch Prepared Statements zum Einsatz kommen und ob ihr eventuelle Performance-Einbußen seht, da pro Statement ja mindestens eine "Suchen & Ersetzen"-Operation durchgeführt werden muss.

Viele Grüße,
Basti
Sangreal ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 03.05.2009, 16:54  
Benutzer
 
Registriert seit: 27.03.2008
Beiträge: 95
PHP-Kenntnisse:
Fortgeschritten
fat32 befindet sich auf einem aufstrebenden Ast
Standard

Also ich verwende nie PS und hatte so auch noch nie Probleme.
Ich frage mich sowieso, was mir das für Vorteile bringen soll
fat32 ist offline   Mit Zitat antworten
Alt 03.05.2009, 17:28  
erc
Erfahrener Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 730
PHP-Kenntnisse:
Fortgeschritten
erc wird schon bald berühmt werden
Standard

Irgendwas passt hier nicht zusammen... Mysqli, prepared und übersichtlich? Da bekomm ich nachts Albträume von Fragezeichen Mit der Variante von PDO kann ich mich da schon eher anfreuden. Persönlich verwenden tuh ich sie aber auch nur wenns Pluspunkte bringt... sprich wenn ich ein und den selben Query x mal ausführen muss, ansonsten bin ich kein Fan davon.

Zitat:
Zitat von Sangreal
Escaped werden kritische Daten bei mir sowieso.
Schon mal mit Prepared Statments getestet? Ein Escapen (escapen != validieren) ist völlig unnötig und noch dazu kontraproduktiv (die Escapesequenzen werden einfach mit gespeichert). Überleg dir mal zuwas escapen da ist und wie Prepared Statments funktionieren. Und wenn du weißt wie ein Prepared Statment funktioniert kannst du dir die Frage der Performance auch selbst beantworten.
erc ist offline   Mit Zitat antworten
Alt 03.05.2009, 17:39  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

Unter gewissen Umständen können prepared Statements schneller sein, z.b. wenn man ein query mehrfach ausführt mit unterschiedlichen Parameter, aber der Query-Cache von mysql wird von prepared Statements z.b. erst seit 5.1.17 unterstützt und auch nicht in allen Fällen.
robo47 ist offline   Mit Zitat antworten
Alt 03.05.2009, 17:57  
Erfahrener Benutzer
 
Benutzerbild von Phoscur
 
Registriert seit: 01.12.2008
Beiträge: 450
PHP-Kenntnisse:
Fortgeschritten
Phoscur wird schon bald berühmt werdenPhoscur wird schon bald berühmt werden
Standard

Hab mal lokal nen Test gemacht, Update über mehrere Einträge...
Alternativ zu PS gibt es nämlich noch CASE und somit ein Update über mehrere Einträge. Genaueres Resultat ist auf meinem Blog zu finden.
Ich konnte feststellen, dass die PS eindeutig langsamer sind, aber sehr gut skalieren, was bei dem CASE nicht der Fall ist.

Ich glaube nicht, dass es einen wirklichen Overhead durch das Ersetzen gibt. Stilistisch könnte es sogar schön und sicher sein, ist daher wohl nur zu empfehlen. Wenn du nun auf Performance aus bist, sparst du am besten mit der Anzahl der Queries.

Wenn du dich an MySQL binden willst, kannst du dir noch Stored Procedures ansehen, die gehen auch sehr schnell, wobei man dort vor allem mit Cursors sparsam sein sollte, meist braucht man sie auch gar nicht.
__________________
Phoscur ist offline   Mit Zitat antworten
Alt 05.05.2009, 00:29  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

prepared statements, transaktionen, utf8 und xml und der brian ist glücklich

Zitat:
Alternativ zu PS gibt es nämlich noch CASE und somit ein Update über mehrere Einträge. Genaueres Resultat ist auf meinem Blog zu finden.
Ich konnte feststellen, dass die PS eindeutig langsamer sind, aber sehr gut skalieren, was bei dem CASE nicht der Fall ist.
hast du die werte die du abändern wolltest auch durch eine escape funktion gejagt? dafür sind Prepared Statements nämlich eigentlich da, nicht escapen zu müssen.

Zitat:
Mich würde deshalb interessieren, in wie weit bei euch Prepared Statements zum Einsatz kommen und ob ihr eventuelle Performance-Einbußen seht, da pro Statement ja mindestens eine "Suchen & Ersetzen"-Operation durchgeführt werden muss.
auch der mysql server muss den query wieder umsetzen, also parsen. da es egal ist ob er ein ? oder einen wert parsed, ists auch jacke wie hose.
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*
brian johnson ist offline   Mit Zitat antworten
Alt 26.09.2009, 14:22  
Benutzer
 
Registriert seit: 17.06.2009
Beiträge: 97
PHP-Kenntnisse:
Fortgeschritten
hondatuner befindet sich auf einem aufstrebenden Ast
Standard

Vielleicht eine blöde Frage, aber wie lange sind PS eigentlich "aktiv". Also machen die nur Sinn, wenn ich innerhalb einer Verbindung den gleichen Query mit unterschiedlichen Vergleichswerten abfrage oder macht das auch global Sinn, da der Cache für jede Verbindung verfügbar ist?

Ansonsten sehe ich nicht den Sinn in PS, weil wiederholte Querys mit unterschiedlichen Parametern, kann ich ja gleich mit ID IN(1,2,3) lösen.

Wenn es global geht, woher weiß ich das der Cache dafür schon vorhanden ist? Oder setzt man ihn auf Verdacht hin, dass er noch nicht da ist, einfach immer neu?

Die Kommentare hier helfen da leider gar nicht:
http://dev.mysql.com/tech-resources/...tatements.html
__________________
meine PHP Scripte
hondatuner ist offline   Mit Zitat antworten
Alt 10.10.2009, 01:03  
Benutzer
 
Registriert seit: 17.06.2009
Beiträge: 97
PHP-Kenntnisse:
Fortgeschritten
hondatuner befindet sich auf einem aufstrebenden Ast
Standard

Ich habe mir mal die Mühe gemacht und alle nur denkbaren SELECT-Varianten in ein Benchmark gepackt. Hier die Ergebnisse:
Benchmark: mysql, mysqli - Buffer, Cache und Prepared Stmt - Forum: PHP

Unter dem Strich heißt das für mich aktuell, dass PS nur für bestimmte Einsatzzwecke Sinn macht, aber sicher nicht global.
__________________
meine PHP Scripte
hondatuner ist offline   Mit Zitat antworten
Alt 10.10.2009, 12:30  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.798
PHP-Kenntnisse:
Fortgeschritten
robo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblickrobo47 ist ein wunderbarer Anblick
Standard

Ich denke mal sehr relevant dabei wäre auch zu wissen welche Version von PHP und mysql verwendet wurden, da sowohl php seit 5.2 einige Sachen im zusammenhang mit der nutzung des Caches von mysql verbessert hat und auch mysql sein Verhalten etwas verändert hat.

Beim Einsatz von PHP 5.3 ist dann auch noch relevant ob php mit libmysql kompiliert wurde oder ob es das neue von mysql selbst für php optimierte backend mysqlnd nutzt.

Was mir vor allem fehlt ist PDO (das im Zusammenspiel mit aktuellen Versionen von PHP und mysql mittlerweile auch den Cache nutzen kann)

Und ein paar Details zum Ablauf des des Benchmarks, inwieweit wurde mysql jedes mal neu gestartet um einen gleichen start zu ermöglichen ... etc.
robo47 ist offline   Mit Zitat antworten
Alt 10.10.2009, 21:11  
Benutzer
 
Registriert seit: 17.06.2009
Beiträge: 97
PHP-Kenntnisse:
Fortgeschritten
hondatuner befindet sich auf einem aufstrebenden Ast
Standard

PDO kannst Du (noch) vergessen. Der Anspruch von PDO liegt nicht darin schneller als mysqli zu sein. Dazu gibt es schon genug Benchmarks und die zeigen eigentlich sehr klar, dass PDO 3-4x langsamer als mysqli ist. Wenn gewünscht, erweitere ich aber den Test um die entsprechenden PDO Varianten.

Serverdaten:
PHP Version 5.2.9-1nmm1
MySQL Version 5.0.51a
AMD Phenom QuadCore
8 GB Arbeitsspeicher
750 GB Festplatte SATA
Hardware-RAID 1

Besondere Optimierungen in Richtung MySQL gibt es nicht, da ich nicht glaube, dass die das Ergebnis wirklich umkehren können.

In wie weit nun PHP mit dem CACHE von MySQL besser umgehen können soll, kann ich allerdings nicht ganz verstehen. Wenn dann kann doch nur MySQL den Cache verbessern?! Oder meinst Du den PHP Buffer?

Die DB wurde einmal pro Seitenimpression konnektiert, die Abfrage 50 mal durch eine Schleife gejagt und das ganze 100x wiederholt. Die Zeit ist dann der Schnitt aus allen 100 Versuchen.
__________________
meine PHP Scripte
hondatuner ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
MySQLi und Prepared Statements #Avedo Datenbanken 5 24.03.2010 17:39
[Erledigt] Mysql:Mergen der Ergebnisse zweier Select Statements... cosmicadi Datenbanken 5 21.02.2009 14:25
[Erledigt] PDO Connection (prepared Statement) als Funktion phpels PHP Tipps 2008 10 02.12.2008 19:05
PDO: beginTransaction nicht mit prepared statements? HStev PHP Tipps 2008 0 16.09.2008 14:35
[Erledigt] bildquelle ermitteln und als variabel speichern und einsetzen ld_forester PHP Tipps 2008 8 27.08.2008 12:11
PDO: 2 Statements nacheinander? HStev PHP Tipps 2008 4 25.08.2008 11:24
Frage zu prepared statements mit pdo Mack22 PHP-Fortgeschrittene 3 16.05.2008 15:10
[Erledigt] Smilies mittels str_replace einsetzen? jackoff PHP Tipps 2008 31 13.05.2008 21:48
begin, commit und rollback statements wollen nicht h0nIg Datenbanken 4 29.08.2007 11:49
Wann persistente MySQL Connections einsetzen? HStev PHP-Fortgeschrittene 2 02.02.2006 13:14
[Erledigt] DB-Design und die Statements dazu Datenbanken 2 13.01.2006 11:15
RealEscape und Mehrzeilige SQL Statements HStev PHP Tipps 2007 6 09.12.2005 21:14
[PHP«Image] Bild in ein anderes Bild einsetzen PHP Tipps 2005-2 4 07.08.2005 19:39
TPL System - Funktionen - Einsetzen - Rechte Problem PHP Tipps 2005 4 26.03.2005 15:17
Intro einsetzen ? PHP Tipps 2004 2 05.08.2004 17:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
prepared statements performance, prepared statement performance, prepared statements, pdo prepared statements performance, php prepared statements performance, vorteile|vorzüge \prepared statements\, preparedstatement schneller ?, mysqli prepared statements escapen, http://www.php.de/php-fortgeschrittene/54741-prepared-statements-immer-einsetzen.html, php prepared statements, mysql prepared statements performance, php prepared statements escape, pdo benchmark, prepared statements schneller, sql prepared statement performance, preparedstatement performance, performance prepared statements, performance preparedstatements, php mysqli escape prepared statement, prepared statement mehrmals php

Alle Zeitangaben in WEZ +1. Es ist jetzt 16:35 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum