2012-07-27 16 views
10

Ich kann ein Nullable-Feld mit einem Standardwert von Null auf Null mit mysql pdo festlegen. Ich kann es mit geraden SQL tun.PHP mysql PDO verweigert NULL-Wert

Ich habe versucht: (meist aus dieser Frage How do I insert NULL values using PDO?)

  1. Null Int

    bindValue(':param', null, PDO::PARAM_INT); 
    
  2. Null Null

    bindValue(':param', null, PDO::PARAM_NULL); 
    
  3. 'Null', Int

    bindValue(':param', 'NULL', PDO::PARAM_INT); 
    
  4. 'Null', NULL

    bindValue(':param', 'NULL', PDO::PARAM_NULL); 
    
  5. Null

    bindValue(':param', null); 
    
  6. 'Null'

    bindValue(':param', 'NULL'); 
    
  7. und die bindParam Pendants von 5 und 6 mit einer Variablen, die hielt den Wert der Bindung.

Alles aus PDO ergibt den Wert wird auf 0.

PHP Version:PHP 5.3.2-1ubuntu4.10

MYSQL SERVER VERSION:5.1.63-0ubuntu0.10.04.1

EDIT Screenshot von Spalteninformationen

Picture

+0

was ist der Spaltentyp? ist das nullfähig? –

+2

@ DanielA.White er sagte nur, dass er es über straight sql tun kann, ja, es ist nullable. –

+0

können Sie uns den Rest Ihres Codes anzeigen, anstatt nur Ihre bindValue-Anweisungen?Ich vermute, wenn Sie alle diese Optionen ausprobiert haben und es kein Problem mit Ihrer tatsächlichen Datenbank ist, dann muss es ein Problem mit dem Rest Ihres Codes sein. –

Antwort

9

Die folgenden Werke für mich:

<?php 

$pdo = new PDO("mysql:host=localhost;dbname=test", "root", "pass"); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

$stmt = $pdo->prepare("INSERT INTO `null_test` (`can_be_null`) VALUES (:null)"); 
$stmt->bindValue(":null", null, PDO::PARAM_NULL); 

$stmt->execute(); 

Pass in PHP null, mit der Art der PDO::PARAM_NULL. Stellen Sie außerdem sicher, dass Ihre Vorbereitungsemulation auf false festgelegt ist. Das könnte helfen.

+6

Dies ...' $ pdo-> setAttribute (PDO :: ATTR_EMULATE_PREPARES, false); 'dieser kleine Kerl hier war der Trick. @ Wahrheit, Danke! Großer Fang! – wmarbut

0

Ich empfehle dringend, zuerst alle Parameter den Variablen zuzuweisen und diese Variablen dann an die bindParam() -Methode zu übergeben.

Sie können zuweisen, indem Sie NULL an diese Variablen übergeben und es wird gut funktionieren.

$myVar = NULL; 
$conn->bindParam(':param1' , $myVar , PDO::PARAM_STR); 

Den ganzen Weg von Pakistan :)