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


How to show Images calling from Database with PHP only one time

当我随机调用数据库中的图像时,它会加载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);

我无法理解你的抽象。

您的第二个查询具有条件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)

因此CCD_ 5的每次调用都返回一个未显示的图像