2012-07-27 13 views
10

Non riesco a impostare un campo nullable con un valore predefinito da null a null utilizzando mysdo pdo. Posso farlo usando straight sql.PHP mysql PDO si rifiuta di impostare il valore NULL

ho provato: (in gran parte da questa domanda 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. ei bindParam controparti del 5 e 6 con una variabile che tenuto il valore del legame.

Tutto da risultati DOP nel valore di essere impostato a 0.

Versione PHP:PHP 5.3.2-1ubuntu4.10

MYSQL Server Versione:5.1.63-0ubuntu0.10.04.1

EDIT Schermata di informazioni colonna

Picture

+0

qual è il tipo di colonna? è nullable? –

+2

@ DanielA.White ha appena detto che può farlo tramite SQL dritto così sì, è nullable. –

+0

puoi mostrarci il resto del tuo codice anziché solo le tue istruzioni bindValue?Ho il sospetto che se hai provato tutte queste opzioni e non è un problema con il tuo database reale, allora deve essere un problema con il resto del codice. –

risposta

9

le seguenti opere per me:

<?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(); 

Passo in PHP di null, con il tipo di PDO::PARAM_NULL. Inoltre, assicurati che l'emulazione di preparazione sia impostata su false. Questo potrebbe aiutare.

+6

Questo ... '$ pdo-> setAttribute (PDO :: ATTR_EMULATE_PREPARES, false);' questo piccolo ragazzo proprio qui era il trucco. @ Verità, grazie! Grande cattura! – wmarbut

0

Raccomanderò fortemente di assegnare prima tutti i parametri alle variabili e quindi di passare tali variabili al metodo bindParam().

È possibile assegnare passando NULL a tali variabili e funzionerà correttamente.

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

Per tutto il tragitto dal Pakistan :)

Problemi correlati