2012-07-27 51 views
10

Tôi không thể đặt trường rỗng có giá trị mặc định là null thành null bằng cách sử dụng mysql pdo. Tôi có thể làm điều đó bằng cách sử dụng sql thẳng.PHP mysql PDO từ chối đặt giá trị NULL

Tôi đã thử: (chủ yếu là từ câu hỏi này 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. bindParam đối tác của 5 và 6 với một biến giữ giá trị của ràng buộc.

Tất cả mọi thứ từ kết quả PDO trong giá trị được thiết lập để 0.

PHP Version:PHP 5.3.2-1ubuntu4.10

MYSQL Server phiên bản:5.1.63-0ubuntu0.10.04.1

EDIT Ảnh chụp màn hình thông tin cột

Picture

+0

loại cột là gì? là vô giá trị? –

+2

@ DanielA.White anh ta chỉ nói anh ta có thể làm điều đó thông qua sql thẳng để có nó là nullable. –

+0

bạn có thể cho chúng tôi thấy phần còn lại của mã của bạn thay vì chỉ các câu lệnh bindValue của bạn?Tôi nghi ngờ nếu bạn đã thử tất cả các tùy chọn này và nó không phải là một vấn đề với cơ sở dữ liệu thực tế của bạn thì nó phải là một vấn đề với phần còn lại của mã của bạn. –

Trả lời

9

Các công trình sau đây cho tôi:

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

đèo trong PHP null, với loại PDO::PARAM_NULL. Ngoài ra, hãy đảm bảo mô phỏng chuẩn bị của bạn được đặt thành false. Điều đó có thể hữu ích.

+6

Điều này ... '$ pdo-> setAttribute (PDO :: ATTR_EMULATE_PREPARES, false);' anh chàng nhỏ bé này ở đây là thủ thuật. @Truth, Cảm ơn! Cú bắt tuyệt vời! – wmarbut

0

Tôi sẽ mạnh mẽ khuyên bạn trước hết nên gán tất cả tham số cho biến và sau đó chuyển các biến đó vào phương thức bindParam().

Bạn có thể gán bằng cách chuyển NULL cho các biến đó và nó sẽ hoạt động tốt.

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

Tất cả các cách từ Pakistan :)

Các vấn đề liên quan