2011-01-31 38 views
5

Tôi có một chút noob- và tôi đang gặp khó khăn ...PHP & MySql kiểm tra xem bảng có trống không

Tôi cần một chút mã tìm kiếm bảng db để tìm hàng khớp với biến $ id. Có một trường trong bảng 'mô tả' mà tôi cần lấy. Nếu nó là null, tôi cần hiển thị một tin nhắn, nếu không phải là một tin nhắn khác. Dưới đây là đoạn code tôi có (Tôi biết tôi cần phải thêm chuỗi mysqli thoát, chỉ cần làm điều này thật nhanh chóng từ bộ nhớ):

$query = "SELECT description FROM posts WHERE id = $id"; 
$result = mysqli_query($dbc, $query); 

$row = mysqli_fetch_array($result, MYSQLI_ASSOC) ; 

if(!$row){ 
echo "<p>'No description'</p>"; 
} else { 
echo '<p>' . $row['description'] . '</p>'; 
} 
+0

Ồ - đây là những gì nó đang làm. Nó trả về mô tả theo cách, bất kể dữ liệu trong db. – user517593

+0

Bạn đang thiếu một số dấu chấm phẩy và không có gì, p –

+0

nếu ($ row <= 0) echo 'empty'; else echo $ row ['description']; Nó hoạt động rất tốt với tôi. Hoặc cố gắng sử dụng hàm mysql_num_row() để kiểm soát kết quả của bạn. – B4NZ41

Trả lời

11

mysqli_fetch_array sẽ lấy một hàng không phụ thuộc nếu các cột trong hàng đó là null. Bạn muốn được kiểm tra nếu $row['description'] được thiết lập thay vì nếu $row được thiết lập:

$query = "SELECT description FROM posts WHERE id = $id"; 
$result = mysqli_query($dbc, $query); 

$row = mysqli_fetch_array($result, MYSQLI_ASSOC); 

if(isset($row['description'])) { 
    echo "<p>No description</p>"; 
} else { 
    echo '<p>' . $row['description'] . '</p>'; 
} 

EDIT: Hoặc, như một sự thay thế, bạn có thể không lấy hàng từ các cơ sở dữ liệu mà mô tả là NULL:

$query = "SELECT description FROM posts WHERE id = $id AND description IS NOT NULL LIMIT 1"; 
$result = mysqli_query($dbc, $query); 

$row = mysqli_fetch_array($result, MYSQLI_ASSOC); 

if(! $row) { 
    echo "<p>No description</p>"; 
} else { 
    echo '<p>' . $row['description'] . '</p>'; 
} 

Bây giờ bạn nên kiểm tra xem bạn có thể lấy một hàng hay không.

+0

Đừng quên truy vấn 'LIMIT 1', không muốn xem toàn bộ bảng một lần tìm thấy hàng có id, giả định rằng id là duy nhất của khóa học. – Phoenix

+0

đó là một! tuyệt vời. – user517593

+0

@Phoenix cảm ơn, 'đã thêm LIMIT 1' theo đề xuất của bạn. – Josh

2

Làm thế nào về:

SELECT COUNT(*) FROM table WHERE `description` IS NOT NULL 
+0

Nhưng nó sẽ cho tôi một số hoặc là cách. Tôi đã thử một mysqli_num_rows và làm một tuyên bố như "if == 0, làm điều này ... nếu == 1, làm điều này" nhưng nó không kiểm tra những gì trong lĩnh vực này, chỉ là có một để mỗi một trở lại một sai tích cực . – user517593

+0

Điều này sẽ không giúp anh ta đạt được những gì anh ta yêu cầu ... – Josh

+0

Ở đó, hãy sửa lỗi đó cho bạn ... – Josh

2

!$row sẽ chỉ xảy ra nếu không tìm thấy bản ghi nào. Nếu mô tả lĩnh vực thực sự là null, bạn phải kiểm tra xem nó theo cách này:

if(is_null($row['description'])){ 

nhưng tôi khuyên bạn nên kiểm tra nếu giá trị là rỗng (hoặc 0 hoặc null):

if(empty($row['description'])){ 
2

BTW, bạn có thể làm việc kiểm tra từ bên trong truy vấn của bạn sử dụng COALESCE:

$query = "SELECT COALESCE(description, 'No description') FROM posts WHERE id = $id"; 
$result = mysqli_query($dbc, $query); 

$row = mysqli_fetch_array($result, MYSQLI_ASSOC) ; 
echo $row['description']; 

bằng cách này, khi có một giá trị cho trường description, nó sẽ được hiển thị bằng cách khác No description sẽ là đầu ra. Vì vậy, theo cách đó, bạn có thể loại bỏ điều kiện if của PHP.

+1

cộng một cho mã súc tích. mặc dù, nếu "mô tả là null" có nhiều hậu quả hơn thay đổi đầu ra, thì điều này là xấu. – davogotland

+0

Cảm ơn Sarfaz, tôi không biết điều đó. – PruitIgoe

+0

@dav: 'COALESCE' sẽ ngăn chặn NULLs poping với thông điệp thân thiện với người dùng, về bản chất nó giống như những gì OP đã làm với PHP :) – Sarfraz

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