Bilder mit PHP per PDO in einem MS-SQL-Server speichern

Es klingt nach einem gängigen Problem: ein hochgeladenes Bild soll in der Datenbank abgespeichert werden. Geht man weiterhin davon aus, dass man den Datenbank-Zugriff per PDO abhandelt, dann sollte doch eigentlich alles ein Selbstläufer sein, oder?

Eine (aber mit Sicherheit nicht die einzige) naheliegende Möglichkeit wäre, die Binärdaten des Bildes als String an die Datenbank zu übergeben und von einer Gespeicherten Prozedur zu varbinary casten zu lassen. Der Weg dahin ist allerdings … sagen wir steinig.

Denn einen Binärstring direkt als \PDO::PARAM_STR zu übergeben, sorgt dafür, dass vom Wert auf der DB-Seite nur noch Salat ankommt.

Als erstes muss man aus dem Binärstring dessen Hex-Wert ermitteln und dann dessen String-Repräsentation (also das übliche 0xFF00…) per \PDO::PARAM_STR an die DB übergeben.

Die Variable $sHex kann man jetzt wie gewohnt in die DB schreiben.

Auf dem MS-SQL-Server steuert man dann eine Gespeicherte Prozedur an, die den Bild-Parameter als varchar(max) erwartet und der dann zu varbinary(max) konvertiert wird. Die Gespeicherte Prozedur sollte dann in etwa so aussehen:

Wie immer in der Hoffung, Euch etwas Sucharbeit gespart zu haben 😉