Php 选择MySQL数据库中的记录,其中id!=0

Php 选择MySQL数据库中的记录,其中id!=0,php,mysql,Php,Mysql,我的网站有问题 我有一张带身份证的照片桌。当用户将文件上载到服务器时,会填充此表,这很好。我也有一个论坛,在那里可以张贴图片,并将图片发送到同一张照片表。在主页上有一个部分,该表中的一张照片显示在该部分下方,并带有分页链接 现在,当有人在论坛上发帖,但他们没有包含一个图片时,它就会崩溃。该线程不会显示,因为它正在查找不存在的照片id 0。所以我上传了一个虚拟图像,将id值改为零,然后尝试 $sql = "SELECT * FROM photographs HAVING id != 0 "; $s

我的网站有问题

我有一张带身份证的照片桌。当用户将文件上载到服务器时,会填充此表,这很好。我也有一个论坛,在那里可以张贴图片,并将图片发送到同一张照片表。在主页上有一个部分,该表中的一张照片显示在该部分下方,并带有分页链接

现在,当有人在论坛上发帖,但他们没有包含一个图片时,它就会崩溃。该线程不会显示,因为它正在查找不存在的照片id 0。所以我上传了一个虚拟图像,将id值改为零,然后尝试

$sql = "SELECT * FROM photographs HAVING id != 0 ";
$sql .= "LIMIT {$per_page} ";
$sql .= "OFFSET {$pagination->offset()}";
这起作用了,图像不再显示,但是分页仍然认为那里有记录。它显示了该图像的链接,当用户单击它时,它会断开并删除一堆其他链接,这是一团混乱

是否可以从数据库中选择所有内容,但不选择0记录,或者从分页链接中删除链接?代码如下:

//1. the current page number ($current_page)
$page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;

//2. records per page ($per_page)
$per_page = 1;

//3. total record count ($total_count)
$total_count = Photograph::count_all();


//Find all photos
//use Pagination instead
//$photos= Photograph::find_all();

$pagination = new Pagination($page, $per_page, $total_count);

//Instead of finding all records, just find the records
//for this page
$sql = "SELECT * FROM photographs HAVING id != 0 ";
$sql .= "LIMIT {$per_page} ";
$sql .= "OFFSET {$pagination->offset()}";
$photos = Photograph::find_by_sql($sql);

//Need to add ?page=$page to all links we want to
//maintain the current page(or store $page in $session)
?>

    <div id="right">
    <?php
    foreach($photos as $photo): 
    ?>
<h3 style="margin: 0;"></h3>
<div style="padding: 5px;">
    <a href="photo.php?id=<?php echo $photo->id; ?>"><img src="<?php echo $photo->image_path(); ?>" width="200" alt="Photo Share Photo" /></a>
   <p align="center"><?php echo $photo->caption; ?></p>
   </div>
   <?php }
endforeach; 
?>

   <div id="pagination" style="clear: both;" align="center">
   <?php
if($pagination->total_pages() > 1) {

    if($pagination->has_previous_page()) {
        echo "<a href=\"index.php?page=";
        echo $pagination->previous_page();
        echo "\">&laquo; Previous</a> ";
    }

    for($i=1; $i <= $pagination->total_pages(); $i++) {
        if($i == $page) {
            echo " <span class=\"selected\">{$i}</span> ";
        } else {
        echo " <a href=\"index.php?page={$i}\">{$i}</a> ";
    }
    }

    if($pagination->has_next_page()) {
        echo " <a href=\"index.php?page=";
        echo $pagination->next_page();
        echo "\">Next &raquo;</a> ";
    }
}
?><br />
<div align="center">
<a href="photo_upload.php">Upload a new photograph</a>
</div>

我把这个添加到照片对象中。现在,用户可以选择是否希望在照片共享部分显示他们的图像,如果他们不在帖子中上载图像,则会自动为其分配ID 0。如果这还不清楚,有人需要帮助,请告诉我。

正如G-Nugget提到的那样。NULL更适合于此。 你的问题看起来也很奇怪。通常的语法是:

SELECT * FROM photographs WHERE id != 0
Having用于对
分组依据
查询应用筛选

编辑: 看起来您正在使用此处分页的$total_count:

$total_count = Photograph::count_all();

<snip>

for($i=1; $i <= $pagination->total_pages(); $i++) {
        if($i == $page) {
            echo " <span class=\"selected\">{$i}</span> ";
        } else {
        echo " <a href=\"index.php?page={$i}\">{$i}</a> ";
}
$total_count=photo::count_all();
对于($i=1;$i总页数();$i++){
如果($i==$page){
回声“{$i}”;
}否则{
回声“;
}

由于$total_count包含0记录,这将显示比现有页面更多的链接。

看起来您应该使用
NULL
而不是
0
。使用NULL对我来说没有意义。id确实有一个值。该值为0。因此我希望它不等于0。该部分有效。现在,表中有5条记录,一条ID为0,我想排除该记录。sql有效,它不会捕获该记录,但出于某种原因,分页会看到有五条记录,显示五条记录,即使其中一条记录为空,因为它已从sql调用中排除。我很难理解它。我确实将其更改为ID!=0的位置。它仍然有效不显示记录,但通过分页有一个指向它的链接。哦,我是否应该将id更改为null,并将sql更改为不查找null?我尝试过,我无法将id值设置为null,因为id设置为int而不是null。
SELECT * FROM photographs WHERE id != 0
$total_count = Photograph::count_all();

<snip>

for($i=1; $i <= $pagination->total_pages(); $i++) {
        if($i == $page) {
            echo " <span class=\"selected\">{$i}</span> ";
        } else {
        echo " <a href=\"index.php?page={$i}\">{$i}</a> ";
}