Montag, 2. Oktober 2006

PHP

Stored Procedure in MS-SQL mit PHP

Stored Procedures sind eine sehr gute Funktion. Ein DBMS (Datenbank Management Systeme), welches diese Funktion mitbringt ist MS-SQL. Doch wie funktioniern die Stored Procedures im Zusammenspiel mit PHP?

Aufruf von Stored Procdures in PHP

Wie rufe ich ein Stored Procedure in MS-SQL mit PHP auf? Vorab die Beispieldefinition. Aufgerufen soll die Stored Procedure "tolleProzedur". Die S.P. nimmt folgende Parameter entgegen. Eine ID (Integer) und eine Attribut mit dem Namen "title", welches ein VARCHAR ist.

Den Scriptteil zur Verbindung zum MS-SQL Server und der Auswahl der Datenbank findet ihr in Listing 1. Diesen Teil benötigt ihr natürlich immer um Operationen auf der Datenbank durchzuführen.

Listing 1

Download Code!

  1.  
  2. // Aufbauen der Verbindung
  3. $connection = mssql_connect('hostname', 'user name', 'passwort');
  4. // Wahl der Datenbank
  5. mssql_select_db('datenbankname', $connection);
  6.  

Mir sind insgesamt drei Arten bekannt um in MS-SQL mit PHP ein Stored Procedure auszufüren.

Inline Aufruf Stored Procdures

Das erste seht ihr in Listing 2. Es wird so der mssql_execute Funktion übergeben.

Listing 2

Download Code!

  1.  
  2. $result = mssql_query("EXEC tolleProzedur 5, 'Toller Titel'", $connection);
  3.  

Inline Aufruf Stored Procdures mit Named Parameters

Es funktioniert, aber es ist leider nicht so aussagekräftig, wie beispielsweise das Listing 3. Hier wird mit, ich nenne es, "Named Parameters" gearbeitet. Sehen können wir das an dem vorgestellten @-Zeichen, gefolgt vom Namen des Parameters.

Listing 3

Download Code!

  1.  
  2. $result = mssql_query("EXEC tolleProzedur @ID=5, @title='Toller Titel'", $connection);
  3.  

Perpared Statement und Stored Procdures

Als dritte Möglichkeit, gibt es noch das ganze als Perpared Statement in MS-SQL auszuführen.

Ein Prepared Stament in MS-SQL mit PHP wird mit der mysq_bind() Funktion:

bool mssql_bind ( resource stmt, string param_name, mixed var, int type [, int is_output [, int is_null [, int maxlen]]])

gebaut. Unser Beispiel sieht als Prepared Statement so aus:

Listing

Download Code!

  1.  
  2. // Prepared Statement initalisieren
  3. $bindRessourceID = mssql_init('tolleProzedur', $connection);
  4. // Binden des Parameters ID
  5. mssql_bind($bindRessourceID, '@ID', 5, SQLINT11, false);
  6. // Binden des Parameters title
  7. mssql_bind($bindRessourceID, '@title', 'Toller Titel', SQLINT11, false);
  8. // Ausführen des Prepared Statements
  9. $result = mssql_execute($bindRessourceID);
  10.  

Der Vorteil der Lösung mit Prepared Statements ist, zum einen, die explizite Typisierung, die man vornehmen kann. Beispielsweise mit SQLINT und SQLVARCHAR.

Ein anderer Vorteil, der meiner Meinung nach noch viel gewichtiger ist, liegt eindeutig in der Sicherheit gegen SQL-Injektionen (SQL-Inkection). Als Vorsichtsmaßnahme, sollte trotzdem der User, der stark in seinen Rechten eingeschränkt werden.

Alle Rechte sollten auf das absolute Minimum reduziert werden.

Bewertung: 5 von 5, 1 Stimme(n) 3090 Klicks
PHP
Von Mr.Foo in PHP am 02.10.06@23:52 Uhr

Trackbacks
Trackback für spezifische URI dieses Eintrags

Keine Trackbacks

5 Kommentare
Ansicht der Kommentare: (Linear | Verschachtelt)

Manda Krishna Srikanth - #1 - 16.03.2007 10:18 - (Antwort)

I've learnt new way of executing the stored procedure. Thanks alot for this article.

Mr. Foo - #2 - 16.03.2007 14:04 - (Antwort)

No problem - nice that I could help you out :-)

Ben - #3 - 26.03.2007 18:55 - (Antwort)

Dein Artikel hat mir auch ein Stück weitergeholfen, allerdings findet er nicht die vorhandene Stored Procedure...
Zusammen mit http://www.pengoworks.com/index.cfm?action=articles:spExecuteDTS kann man richtig viel mit PHP auf einem MS SQL Server ausrichten.

Mr. Foo - #3.1 - 27.03.2007 15:41 - (Antwort)

Hi Ben,

welche Stored Procedure meinst du?

Ben - #3.1.1 - 27.03.2007 16:23 - (Antwort)

Hi, hat sich erledigt. hatte die stored procedure nicht als dbo angelegt gehabt, dadurch konnte ich sie nicht aufrufen.


Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Sie können [geshi lang=LANG][/lang] Tags verwenden um Quellcode abhängig von der gewählten Programmiersprache einzubinden
 
 

Mr. Foo

Stored Procedure in MS-SQL mit PHP

  • Homepage

Suche

Kategorien

  • Android (2)
  • C-Sharp (4)
  • Datenbank (30)
  • Delphi (2)
  • Entwicklung (36)
  • Flash (5)
  • Games (10)
  • Gutscheine (4)
  • Hardware (14)
  • HTML CSS (16)
  • Internet (88)
  • Java (32)
  • Javascript (24)
  • Linkdump (9)
  • Linux (102)
  • Low-Level (10)
  • Lua (8)
  • Musik (9)
  • Netzwerk (25)
  • New World Order (109)
  • Perl (3)
  • PHP (130)
  • Magento (5)
  • Symfony (3)
  • Zend Framework (7)
  • Probleme und Lösungen (26)
  • Python (22)
  • Ressourcen (23)
  • Sicherheit (91)
  • Software (60)
  • Sonstiges (47)
  • Own Stuff (48)
  • Spass (46)
  • Technik / Wissenschaft (4)
  • Tips (15)
  • Weisheiten (17)
  • Windows (23)
  • Wort des Tages (15)


Alle Kategorien

Archive

  • Mai 2012
  • April 2012
  • März 2012
  • Das Neueste ...
  • Älteres ...

Abonnieren lohnt sich!

  • XML RSS 2.0 feed
  • ATOM/XML ATOM 1.0 feed
  • XML RSS 2.0 Kommentare

Tagcloud

Datenbank Entwicklung Internet Java Javascript Linux Lösung Netzwerk News New World Order PHP Problem Probleme und Lösungen Sicherheit Software Sonstiges Spass Tipp Update Windows

Beliebte Einträge

  • Magento ist scheisse (197)
  • Plugin-container.exe deaktivieren (107)
  • BWin Betrug und Abzocke bei Minigames? (65)
  • C compiler cannot create executables unter Debian (53)
  • Scheiss Linux - USB-Platte viel zu langsam (wenns mal funktioniert) (43)
  • Sicheres Kontaktformular mit PHP - Spam verhindern (37)
  • UML-Diagramme aus Java-Klassen generieren – Java2UML (28)
  • Es konnte keine TCP/IP-Verbindung mit dem Host hergestellt werden (28)
  • Option Bug im Internet Explorer bei Nutzung von innerHTML und Javascript (24)
  • Zend Studio - Javaw.exe lastet die CPU aus (24)

Kommentare

Hugo zu BWin Betrug und Abzocke bei Minigames?
So, 20.05.2012 12:25
ich habe mich gestern auf BWIN reg [...]
Ubuntu 12.04 zu The assembly mscorlib.dll was not found or could not be loaded.
Fr, 18.05.2012 17:11
Hat bei mir leider nicht geklappt. [...]
Oliver Riske zu Es konnte keine TCP/IP-Verbindung mit dem Host hergestellt werden
Di, 15.05.2012 20:38
Super Danke!
anon zu BWin Betrug und Abzocke bei Minigames?
Sa, 05.05.2012 18:43
ihr scheiss betrüger
Jürgen zu Unable to elevate error:1814 VLC Problem
Mi, 02.05.2012 16:54
So einfach ist es bei mir jedenfal [...]
 

Kontakt/Informationen