2011-01-06 41 views
56

Tôi có một câu lệnh MySQL chèn một số biến vào cơ sở dữ liệu. Gần đây tôi đã thêm 2 trường là tùy chọn ($ intLat, $ intLng). Ngay bây giờ, nếu các giá trị này không được nhập, tôi chuyển một chuỗi rỗng thành một giá trị. Làm thế nào để vượt qua một giá trị NULL rõ ràng để MySQL (nếu có sản phẩm nào)?MySQL và PHP - chèn NULL thay vì chuỗi rỗng

$query = "INSERT INTO data (notes, id, filesUploaded, lat, lng, intLat, intLng) 
      VALUES ('$notes', '$id', TRIM('$imageUploaded'), '$lat', '$long', 
        '$intLat', '$intLng')"; 
mysql_query($query); 

Trả lời

100

Để chuyển giá trị NULL sang MySQL, bạn thực hiện điều đó.

INSERT INTO table (field,field2) VALUES (NULL,3) 

Vì vậy, trong mã của bạn, kiểm tra if $intLat, $intLngempty, nếu họ đang có, sử dụng NULL thay vì '$intLat' hoặc '$intLng'.

$intLat = !empty($intLat) ? "'$intLat'" : "NULL"; 
$intLng = !empty($intLng) ? "'$intLng'" : "NULL"; 

$query = "INSERT INTO data (notes, id, filesUploaded, lat, lng, intLat, intLng) 
      VALUES ('$notes', '$id', TRIM('$imageUploaded'), '$lat', '$long', 
        $intLat, $intLng)"; 
+3

này không thêm một giá trị mysql NULL. Điều này đặt thuộc tính cho chuỗi "NULL" khác với giá trị mysql NULL. Tôi chỉ nói rằng bạn đã viết hai điều khác nhau, đầu tiên là chính xác thứ hai không quá nhiều tôi nghĩ. – G4bri3l

+16

@ G4bri3l: Trong chuỗi '$ query',' $ intLat' và '$ intLng' không được trích dẫn. Vì vậy, khi các biến được nội suy, nó sẽ là ', NULL, NULL);'. –

+1

Ồ vâng tôi thấy điều đó ngay bây giờ. Tốt đẹp! Cảm ơn đã dành thời gian để chỉ nó ra cho tôi;) – G4bri3l

10

Nếu bạn không chuyển giá trị, bạn sẽ nhận được giá trị mặc định.

Nhưng bạn chỉ có thể chuyển từ NULL mà không có dấu ngoặc kép.

+7

Anh ta sẽ chỉ nhận NULL theo mặc định, nếu bảng được thiết lập theo cách đó. –

+2

Với tôi đó là ý nghĩa "tùy chọn". – dkretz

1

Kiểm tra các biến trước khi xây dựng các truy vấn, nếu họ là trống rỗng, thay đổi chúng vào chuỗi NULL

2

truy vấn của bạn có thể đi như sau:

$query = "INSERT INTO data (notes, id, filesUploaded, lat, lng, intLat, intLng) 
     VALUES ('$notes', '$id', TRIM('$imageUploaded'), '$lat', '$lng', '" . ($lat == '')?NULL:$lat . "', '" . ($long == '')?NULL:$long . "')"; 
mysql_query($query); 
+2

$ intLat và $ intLng là các tùy chọn. –

+0

Điều này sẽ không hoạt động. Có một vài điều sai với đoạn mã này (ngoài việc sử dụng các biến sai, như Rocket đã chỉ ra). Vì ưu tiên của toán tử bậc ba, bạn sẽ cần các dấu ngoặc đơn xung quanh biểu thức. Nhưng quan trọng, bạn vẫn còn xung quanh giá trị cột trong dấu ngoặc kép duy nhất, vì vậy bạn trở lại một hình vuông, gán một chuỗi, không phải là một cơ sở dữ liệu 'NULL'. Ngoài ra, bạn đang sử dụng từ khóa 'NULL' (unquoted) của PHP, mà đánh giá thành một chuỗi rỗng trong một ngữ cảnh chuỗi, vì vậy một lần nữa, bạn đang gán một chuỗi _empty_. – MrWhite

1

bạn có thể làm điều đó cho ví dụ với

UPDATE `table` SET `date`='', `newdate`=NULL WHERE id='$id' 
2

Thông thường, bạn thêm giá trị thường xuyên để mySQL, từ PHP như thế này:

function addValues($val1, $val2) { 
    db_open(); // just some code ot open the DB 
    $query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES ('$val1', '$val2')"; 
    $result = mysql_query($query); 
    db_close(); // just some code to close the DB 
} 

Khi giá trị của bạn trống/null ($ VAL1 == "" hoặc $ VAL1 == NULL), và bạn muốn NULL để được thêm vào SQL và không phải là 0 hoặc chuỗi rỗng, như sau:

function addValues($val1, $val2) { 
    db_open(); // just some code ot open the DB 
    $query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (". 
     (($val1=='')?"NULL":("'".$val1."'")) . ", ". 
     (($val2=='')?"NULL":("'".$val2."'")) . 
     ")"; 
    $result = mysql_query($query); 
    db_close(); // just some code to close the DB 
} 

Lưu ý rằng null phải được thêm là "NULL" và không phải là "NULL". Các giá trị không null phải được thêm vào là "'". $ Val1. "'", V.v.

Hy vọng điều này sẽ giúp tôi sử dụng điều này cho một số bộ ghi dữ liệu phần cứng, một số thu thập nhiệt độ và bức xạ, những người khác chỉ có bức xạ. Đối với những người không có cảm biến nhiệt độ tôi cần NULL và không 0, vì lý do rõ ràng (0 là một giá trị nhiệt độ được chấp nhận cũng).

1

Vì lý do nào đó, giải pháp của radhoo sẽ không hoạt động đối với tôi. Khi tôi sử dụng các biểu thức sau đây:

$query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (". 
    (($val1=='')?"NULL":("'".$val1."'")) . ", ". 
    (($val2=='')?"NULL":("'".$val2."'")) . 
    ")"; 

'null' (với dấu ngoặc kép) được chèn thay vì null mà không có dấu ngoặc kép, làm cho nó một chuỗi thay vì một số nguyên. Vì vậy, cuối cùng tôi đã cố gắng:

$query = "INSERT INTO uradmonitor (db_value1, db_value2) VALUES (". 
    (($val1=='')? :("'".$val1."'")) . ", ". 
    (($val2=='')? :("'".$val2."'")) . 
    ")"; 

Các trống dẫn đến việc vô chính xác (không thể viện chứng) được đưa vào truy vấn.

5

Tất cả những gì bạn phải làm là: $variable =NULL; // và chuyển nó vào truy vấn chèn.Điều này sẽ lưu trữ các giá trị như NULL trong mysql db

+0

Không cần báo giá xung quanh "NULL". – Louis

4

này chỉ hoạt động tốt đối với tôi:

INSERT INTO table VALUES ('', NULLIF('$date'='')) 

(đầu tiên '' increments trường id)

+1

NULLIF có 2 tham số 'NULLIF (expr1, expr2)'. Xem http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_nullif –

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