0

同様のトピック (別のページの別のクラスで mysqli 接続にアクセスする方法は? ) がありましたが、それは私の質問に完全に答えていないか、要点を逃しています。データベースから一連の画像 URL と div ID を取得することで、スライドショーの骨組みをすばやく構築できるクラスを構築しようとしています。これが私が管理したものです:

      class make_slide 
  {
    private $slide_mysqli;
    public $get_slide;
    public $single_slide;
    public $get_imgurl1; 
    public $get_imgurl2; 
    public $get_imgurl3; 
    public $get_imgurl4; 
    public $get_imgurl5; 
    public $get_imgid1; 
    public $get_imgid2; 
    public $get_imgid3; 
    public $get_imgid4; 
    public $get_imgid5; 

    function __construct(){
    $this->slide_mysqli = new mysqli('localhost','user', 'password','database') or die($this->mysqli->error);
    }

    function get_slides ($page) 
    {
      if ($this->get_slide = $this->slide_mysqli->prepare('SELECT IMAGE_URL1, IMAGE_URL2, IMAGE_URL3, IMAGE_URL4, IMAGE_URL5, IMAGE_ID1, IMAGE_ID2, IMAGE_ID3, IMAGE_ID4, IMAGE_ID5 FROM Page WHERE ID=? AND IMAGE_URL1 != NULL')) 
      {
        $this->get_slide->bind_param('s', $page);
        $this->get_slide->bind_result($this->get_imgurl1, $this->get_imgurl2, $this->get_imgurl3, $this->get_imgurl4, $this->get_imgurl5, $this->get_imgid1, $this->get_imgid2, $this->get_imgid3, $this->get_imgid4, $this->get_imgid5); 
        $this->get_slide->execute();
        $this->get_slide->store_result();         
        $this->get_slide->fetch();
        $this->get_slide->free_result();
        $this->get_slide->close();  
      }
      //print the slideshow out here... for example
      print '<br><img src="http://***.com/'.$this->get_imgurl1.'" alt="'.$this->get_imgid1.'" height="200"/></div>';
      print '<br><img src="http://***.com/'.$this->get_imgurl1.'" alt="'.$this->get_imgid2.'" height="200"/></div>';

    }
  }

したがって、次を実行すると、クラスがすべての作業を行います。

  $slide = new make_slide();
  $slide->get_slides('home');

画像を印刷しているだけで、データベースから取得したものは無視しています。エラーログを確認すると、

PHP 通知: 未定義の定数 IMAGE_ID5 の使用 - /var/www/ / .com/httpdocs/index.php の 216 行目で「IMAGE_ID5」を想定、リファラー: http://***.com/index.php

私が間違っていることについての手がかりはありますか?

4

1 に答える 1

0

答えは簡単です:プリペアド ステートメントを使用しないか、初心者向けマニュアルの非常に簡単なステートメントに限定しない限り、mysqliを使用しないでください。
独自のクラス内で使用するなど、mysqli の準備済みステートメントの複雑な使用法は悪夢です。

代わりに PDO を使用してください。
PDO ALL を使用すると、コードは 1 つの小さな関数を使用します。

function get_slides ($page) 
{
    global $pdo;
    $pdo->prepare('SELECT * FROM Page WHERE ID=? AND IMAGE_URL1 != NULL');
    $stm = $pdo->execute(array($page));
    $row = $stm->fetch();
    foreach ($row as $img) {
        print "<br><img src='http://***.com/$img' alt='$img' height='200'/></div>";
    }
}

ただし、コメントで言われたように、エラーはここに投稿したコードとは無関係です。

于 2013-02-18T06:26:57.523 に答える