也有类似的主题(如何在另一个页面上的另一个类中访问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-假定为"IMAGE_ID5"在/var/www//.com/httpdocs/index.php的第216行,referer:http://***.com/index.php
请问我做错了什么?
答案很简单:不要使用mysqli,除非你不打算使用准备好的语句,或者只使用初学者手册中非常简单的语句
无论mysqli准备的语句有什么复杂的用法,比如在自己的类中使用它,都是一场噩梦
请改用PDO
有了PDO,所有的代码都将使用一个小功能:
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>";
}
}
然而,正如你在评论中所说的,你的错误与你在这里发布的代码无关。