2012-09-30 32 views
10

Hiện tại tôi đang sử dụng Tinyint(1) để chỉ các giá trị Boolean trong cơ sở dữ liệu MySQL của tôi, mà tôi thực sự không thích điều đó. Vì vậy, làm cách nào tôi có thể lưu trữ và truy xuất các giá trị Boolean trong các cơ sở dữ liệu MySQL của mình qua PHP?Để đối phó với các giá trị 'Boolean' trong PHP & MySQL

Cách sử dụng nó trong mệnh đề WHERE và cách gán giá trị trong các truy vấn INSERT, UPDATE đúng cách?

Khi tôi có nó trở lại trên PHP, đó là TRUE, true hoặc chỉ đơn giản là 1, nếu tôi sẽ kiểm tra điều đó với ===?

Bạn cũng gặp bất kỳ sự cố nào khi di chuyển từ Tinyint(1) sang BOOLEAN?

Xin cảm ơn trước. :)

Cập nhật:

Tôi biết rằng Tinyint(1) cũng giống như Boolean, tuy nhiên tôi muốn làm việc trên Boolean kiểu dữ liệu thay vì Tinyint(1). Đó là lý do tại sao tôi hỏi câu hỏi.

+7

'BOOL, BOOLEAN' chỉ là ** từ đồng nghĩa ** cho 'TINYINT (1)' trong MySQL. –

+0

cảm ơn, vâng tôi biết điều đó, nhưng tôi muốn làm việc trên 'Boolean' ở phía PHP của tôi, thay vì' Tinyint', đó là lý do tại sao tôi hỏi ... – Mahdi

+0

Mặc dù nó phụ thuộc vào phương pháp của bạn, bạn có thể cần để đưa từ khóa 'true'' false' vào 'int' khi chèn vào bất kỳ loại int nào.Tôi tin rằng một số hình thức báo cáo chuẩn bị thực hiện sắp xếp này cho bạn, nhưng nếu truy vấn của bạn là nội tuyến, thì điều này là cần thiết. –

Trả lời

15

MySQL không có loại dữ liệu boolean. Tinyint (1) là khá gần đủ. Làm việc với điều này trong PHP rất đơn giản.

If (1) echo 'true'; // is the same as if (true) 
// Just as 
if (0) echo 'false'; // is the same as if (false) 

Và nếu bạn thực sự thực sự muốn có một giá trị boolean, bạn có thể làm

// $mysql_data is tinyint value from db 
$boolean = $mysql_data ? true : false; 
// Now you have your boolean as $boolean 
+0

cảm ơn người đàn ông, bây giờ tôi đang tìm kiếm các giá trị BIT BTW :) – Mahdi

+0

Trong MySQL, các giá trị TRUE và FALSE chỉ là bí danh cho 1 và 0 như được giải thích [trong tài liệu mysql] (https: //dev.mysql. com/doc/refman/5.7/en/số-type-overview.html) – mikewasmike

4

Với boolean, không sử dụng === FALSE - giá trị đã là boolean (trừ khi hàm yêu cầu bạn sử dụng ===, như strpos()). Giá trị là booleanish - đó là số nguyên về mặt kỹ thuật, nhưng PHP là ngôn ngữ động, vì vậy nó không phải là vấn đề.

Hãy xem xét hàm preg_match() - nó trả về số kết quả phù hợp (số nguyên).

Bạn có muốn viết điều đó không?

if (preg_match('/\bregexp?\b/', $variable) === 1) 

Hoặc điều đó?

if (preg_match('/\bregexp?\b/', $variable)) 

Rõ ràng, cách mà không rõ ràng === 1 là tốt hơn. Bạn hỏi nếu nó phù hợp, không phải nếu nó có 0 trận đấu. Ngoài ra, nếu bạn nghĩ rằng === 1 là an toàn hơn, tại sao không làm === 1 === TRUE?

Tất nhiên, bạn có thể chuyển đổi các giá trị thành boolean bằng cách sử dụng (bool) hoặc !!.

Ngoài ra, trong một số ngôn ngữ nhất định như C hoặc Perl, không có sự khác biệt giữa các phép toán và số. Nó chỉ hoạt động.

+0

hey, cảm ơn! nó thực sự thú vị đối với tôi! :) – Mahdi

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