Your posted answer is not DRY and fetch_object() will force you to nominate each column by name. Accessing the columns by their name will force you to write long-winded code blocks or shorter code blocks with variable variable naming (which most people try to avoid).
I have written a simple, DRY block of code using array_filter() on fetch_row() to generate image tags from non-null column values.
If your $up_id
is user input, be sure to do some form of sanitizing before it is used in the query.
$up_id=2;
if(!$db=new mysqli("host","user","pass","db")){
echo "Connection Error: ",$db->connect_error; // do not echo when live
}elseif(!$result=$db->query("SELECT img_1,img_2,img_3,img_4,img_5,img_6,img_7,img_8,img_9,img_10 FROM `tours` WHERE `up_id`=$up_id")){
echo "Query Syntax Error: ",$db->error; // do not echo when live
}elseif(!$result->num_rows){
echo "Query Logic Error: No Rows For $up_id"; // write your preferred message
}else{
foreach(array_filter($result->fetch_row()) as $column){
echo "<div>";
echo "<img data-u=\"image\" src=\"img/$column\" />";
echo "<img data-u=\"thumb\" src=\"img/$column\" />";
echo "</div>";
}
}
If you run that code on this table:
CREATE TABLE `tours` (
`up_id` int(10) NOT NULL,
`img_1` varchar(100) DEFAULT NULL,
`img_2` varchar(100) DEFAULT NULL,
`img_3` varchar(100) DEFAULT NULL,
`img_4` varchar(100) DEFAULT NULL,
`img_5` varchar(100) DEFAULT NULL,
`img_6` varchar(100) DEFAULT NULL,
`img_7` varchar(100) DEFAULT NULL,
`img_8` varchar(100) DEFAULT NULL,
`img_9` varchar(100) DEFAULT NULL,
`img_10` varchar(100) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `tours` (`up_id`, `img_1`, `img_2`, `img_3`, `img_4`, `img_5`, `img_6`, `img_7`, `img_8`, `img_9`, `img_10`) VALUES
(1, 'imgA.jpg', 'imgB.jpg', 'imgC.jpg', 'imgD.jpg', 'imgE.jpg', 'imgF.jpg', 'imgG.jpg', 'imgH.jpg', 'imgI.jpg', 'imgJ.jpg'),
(2, 'imgK.jpg', 'imgL.jpg', NULL, 'imgN.jpg', 'imgO.jpg', NULL, 'imgQ.jpg', NULL, 'imgS.jpg', NULL);
ALTER TABLE `tours`
ADD PRIMARY KEY (`up_id`);
ALTER TABLE `tours`
MODIFY `up_id` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
Your output source code will look like this:
<div><img data-u="image" src="img/imgK.jpg" /><img data-u="thumb" src="img/imgK.jpg" /></div>
<div><img data-u="image" src="img/imgL.jpg" /><img data-u="thumb" src="img/imgL.jpg" /></div>
<div><img data-u="image" src="img/imgN.jpg" /><img data-u="thumb" src="img/imgN.jpg" /></div>
<div><img data-u="image" src="img/imgO.jpg" /><img data-u="thumb" src="img/imgO.jpg" /></div>
<div><img data-u="image" src="img/imgQ.jpg" /><img data-u="thumb" src="img/imgQ.jpg" /></div>
<div><img data-u="image" src="img/imgS.jpg" /><img data-u="thumb" src="img/imgS.jpg" /></div>
*I added linebreak after each pair for easier reading.