xxxmarcoxxx
Goto Top

PHP Wert Null an MS-SQL übergeben

Hallöchen PHP Freunde face-smile

folgendes Problem, ich habe eine Variable die ich in meinem Script auf $var = NULL; setze und dieses in meinen MS-SQL 2008 schreibe.
Nur leider schreibt er nicht das Feld auf "NULL" sondern das Feld ist einfach nur "empty". face-sad
Ich habe jetzt mindestens halb google zu diesem Thema durch und finde einfach keinen Ansatz, bin auch davon ausgegangen das man dies in der PHP.ini einstellt, aber pustekuche.

Ich weiss das es in My-SQL geht aber hier ist irgendwie mal wieder der Wurm drin.

Könnte Ihr mir weiterhelfen?


Grüße Marco

Content-Key: 168145

Url: https://administrator.de/contentid/168145

Printed on: April 26, 2024 at 12:04 o'clock

Member: Arano
Arano Jun 16, 2011 at 18:32:21 (UTC)
Goto Top
Hallo Freund ...Marco *g*


Habe keinen MSSQL-Server.
Aber ich vermute mal, das du einen kleinen Fehler machst... höhö.... einen der "bei MySQL" zum gleichem Ergebnis führen sollte.

$var = NULL;
$query = "INSERT INTO `tabelle` (`name`) VALUES (".$var.")";  
// $var ist null / leer, also wird in den Query  __nichts__ eingefügt
$query = "INSERT INTO `tabelle` (`name`) VALUES ()";  
// was einen leeren Datensartz erzeugt - oder ehr eine Fehlermeldung ;)
An die entsprechende Stelle im Query darf nicht NULL eingefügt werden sondern NULL - also nicht der Wert NULL, sondern die Zeichenkette NULL
$query = "INSERT INTO `tabelle` (`name`) VALUES (NULL)";  
// bzw.
$query = "INSERT INTO `tabelle` (`name`) VALUES (".(is_null($var)?'NULL':'').")";  
So das die Zeichenkette NULL erst von der Datenbank noch als Attribut NULL interpretiert werden kann / muss.


Hoffe ich habe damit helfen können,
schönen Gruß
~Arano
Member: XxxMarcoxxX
XxxMarcoxxX Jun 17, 2011 at 07:57:25 (UTC)
Goto Top
Morsche Arano,

ja super Sache, das Funktioniert eindwandfrei, habe doch dann aber noch eine Frage an dich face-smile
Falls die var dann doch mal einen Wert hat, trage ich Sie doch nach dem " : " ein oder?


<?

if(isset($var)){
$var = 'HateinenWert';  
} else { $var = NULL; }

$query = "INSERT INTO `tabelle` (`name`) VALUES (".(is_null($var)?'NULL':'$var').")";  
?>

Nur leider hat das nicht hin, der sagt mir ständig die Fehlermeldung:
mssql-query'>function.mssql-query</a>]: message: Ungültige &quot;$var&quot;-Pseudospalte. (severity 15) in....

Grüße Marco
Member: Arano
Arano Jun 17, 2011 at 13:43:52 (UTC)
Goto Top
Hallo Marco

Ja, von Prinzip her war das richtig !
(is_null($var)?'NULL':'$var')
Ist nämlich eine Kurzform vom IF-ELSE in Klammern für das echo
Zitat: PHP-Manual - if
BEDINGUNG ? WENN_WAHR : WENN_FALSCH
So könntest du die Variable auch vorher manipulieren:
$var = isset() ? 'NULL' : $var;  

Dein Fehler:
Zeichenketten in einfachen Anführungszeichen werden nicht von PHP geparst, was zufolge hat, das in deinem Query "$var" steht und nicht dessen Wert !
PHP-Manual - echo

Da ist aber noch ein Fehler ;) Denn der Wert im ELSE-Zweig ist ein falscher für den Query !
Du musst nocheinmal Anführungszeichen mitgeben damit die Zeichenkette im Query in Anführungszeichen steht ;)

$query = "INSERT INTO `tabelle` (`name`) VALUES (".(is_null($var)?'NULL':'\''.$var.'\'').")";  
Weil der Query so aber etwas schlecht zu lesen ist, greife ich dein Beispiel und meine Erwähnung wieder auf:
<?php
if(isset($var))
    $var = '\''HateinenWert'\''; // zusätzliche Anführungszeichen für den Query, NULL darf keine haben  
else
    $var = 'NULL'; // in der PHP-Variable noch eine normale Zeichenkette, im Query dann aber ohne anführungszeichen damit es als Attribut erkannt wird  

// oder in kurz:
$var = isset($var) ? '\''.$var.'\'' : 'NULL';  

$query = "INSERT INTO `tabelle` (`name`) VALUES (".$var.")";  
//Ergibt: INSERT INTO `tabelle` (`name`) VALUES ('content') 
//Ergibt: INSERT INTO `tabelle` (`name`) VALUES (NULL)
?>


Schönen Start ins Wochenende
~Arano
Member: XxxMarcoxxX
XxxMarcoxxX Jun 20, 2011 at 10:29:44 (UTC)
Goto Top
Guten morgen Arno,

hat wunderbar geklappt, vielen dank für deine exzelente Hilfe.. face-smile

Grüße Marco