2013-02-14 6 views
0

была аналогичная тема (How to access mysqli connection in another class on another page?), но она не совсем отвечает на мой вопрос, или мне не хватает смысла. Я пытаюсь создать класс, который позволит мне быстро создать кости слайд-шоу, вытаскивая набор URL-адресов изображений и div-идентификаторов из базы данных. Вот что мне удалось:Запуск инструкции по подготовке mysqli внутри моего собственного класса

 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'); 

только это печать изображения, но не обращая внимания на вещи, I» вытащили из базы данных. проверить журналы ошибок, и я сказал

PHP Примечание: Использование неопределенная константа IMAGE_ID5 - предполагается 'IMAGE_ID5' в/вар/WWW// .com/httpdocs/index.php по линии 216, реферер: Http: //***.com/index.php

пожалуйста, любые подсказки относительно того, что я делаю неправильно?

+2

Какая из них - линия 216? – str

+1

Многомерный массив сделал бы вашу жизнь немного легче, я думаю. – jeroen

+1

Ошибочный код не может быть тем, что вы разместили здесь. Причиной «неопределенного константы IMAGE_ID5» будет, скорее всего, переменная, у которой отсутствует ее '$', но единственное место, которое строка появляется в приведенном выше коде, находится внутри строки оператора SQL, где она не будет анализироваться как константа. –

ответ

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

Однако, как you'vebeen сказал в комментариях, ваша ошибка не имеет никакого отношения к коду вы публикуемую здесь.

Смежные вопросы