如何使用PHP只显示一次从数据库调用的图像

时间:2014-04-22 11:59:35

标签: php mysql

当我从数据库随机调用图像时,它会加载x次,但我只想显示一次。

$random = array_rand(Database::query('SELECT * FROM ADVERTISEMENTS' ));
$adv_sql = "SELECT * FROM `ADVERTISEMENTS` WHERE `id` = $random ";

$advResult = Database::single($adv_sql, $random['id']);
$advExplode = explode('/', $advResult['upload']);
$advLocation = 'url/location' . end($advExplode);

1 个答案:

答案 0 :(得分:0)

我无法理解你的抽象。

您的第二个查询的条件为id = $random,但您在single()方法中绑定了参数:$adv_sql, $random['id']

我们不知道你的方法有效,你应该向我们展示它们的实现。

无论如何,这不是一个更好的查询吗?

SELECT * FROM `ADVERTISEMENTS` ORDER BY RAND() LIMIT 1

如果您想收到所有

,或者没有LIMIT

如果您不想在第二个请求中显示已加载的图像,则需要根据需要将目前显示的图像记录到数据库,cookie或会话中。


或者,将显示的图像绑定到实例。

这是我到目前为止的测试:

class Images {

    private $_imagesShown = array("''");

    private function getShownImages() {
        return implode(',', $this->_imagesShown);
    }

    private function setShownImage($row) {
        $this->_imagesShown[] = $row['id'];
    }

    public function getImages() {
        $query = "SELECT id, image FROM images WHERE id NOT IN ({$this->getShownImages()})";
        $result = mysqli_query($query);
        $row = mysqli_fetch_assoc($result);
        $this->setShownImage($row);
        return $row;
    }
}

$img = new Images();
var_dump($img->getImages());
var_dump($img->getImages());
var_dump($img->getImages());
var_dump($img->getImages());
var_dump($img->getImages());
var_dump($img->getImages());
var_dump($img->getImages());
var_dump($img->getImages());

输出:

array (size=2)
  'id' => string '1' (length=1)
  'img' => string '0.jpg' (length=1)

array (size=2)
  'id' => string '2' (length=1)
  'img' => string '1.jpg' (length=1)

array (size=2)
  'id' => string '3' (length=1)
  'img' => string '2.jpg' (length=1)

array (size=2)
  'id' => string '4' (length=1)
  'img' => string '3.jpg' (length=1)

array (size=2)
  'id' => string '5' (length=1)
  'img' => string '4.jpg' (length=1)

array (size=2)
  'id' => string '6' (length=1)
  'img' => string '12.jpg' (length=1)

array (size=2)
  'id' => string '7' (length=1)
  'img' => string '55.jpg' (length=1)

所以getImages()的每次调用都会返回一个未显示的图片