PHP& MySql检查表是否为空

时间:2011-01-31 17:42:40

标签: php mysql if-statement

我有点像菜鸟 - 我很难过......

我需要一些搜索db表的代码来查找与$ id变量匹配的行。我需要抓住该表“描述”中的字段。如果它为null,我需要显示一条消息,如果不是另一条消息。这是我的代码(我知道我需要添加mysqli转义字符串,只需从内存中快速执行此操作):

$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>';
}

4 个答案:

答案 0 :(得分:10)

无论该行中的列是否为空,

mysqli_fetch_array都将获取一行。您想检查是否设置了$row['description']而不是设置了$row

$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>';
}

编辑或者,作为替代方案,您可以不从描述为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>';
}

现在你要检查一下是否能够抓住一行。

答案 1 :(得分:1)

怎么样:

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

答案 2 :(得分:1)

只有在找不到记录时才会出现!$row。如果字段描述确实是null,则必须以这种方式进行检查:

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

但我建议您检查值是否为空(或0或null):

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

答案 3 :(得分:1)

顺便说一句,您可以使用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'];

这样,如果description字段有值,则会显示,否则将输出No description。这样,您就可以取消PHP的if条件。