在我自己的类中运行mysqli prepare语句

时间:2013-02-14 22:19:55

标签: php class mysqli inner-classes prepare

有一个类似的主题(How to access mysqli connection in another class on another page?),但它并没有完全回答我的问题,或者我忽略了这一点。我正在尝试构建一个类,它允许我通过从数据库中提取一组图像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 - 假设为'IMAGE_ID5'   在/var/www//.com/httpdocs/index.php第216行,参考:   HTTP://***.com/index.php

请问,我做错了什么线索?

1 个答案:

答案 0 :(得分:0)

答案很简单:请勿使用mysqli ,除非您不打算使用预先准备好的陈述或将自己限制在初学者手册中非常简单的陈述中。 无论mysqli准备好的语句的复杂用法如何在你自己的类中使用它都是一场噩梦。

改用PDO 使用PDO ALL,您的代码将采用一个小功能:

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>";
    }
}

但是,正如您在评论中所说,您的错误与您在此处发布的代码无关。