如何从一个fetch_object中检索非空数据

时间:2017-05-02 12:07:02

标签: php sql slider carousel bootstrap-modal

我正在创建一个旅游网站,我的页面上有一个旋转木马 最多10张图片。

我的tours表中有10列,名为img_1img_2 ... img_10

在某些情况下,一行可能只有6张图片,因此转盘中只能显示6张图片。

我想使用fetch_object()或其他内容检索它们。

这是我的代码:

<?php
$resImg = $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 = 1 and img_1 is not null");
// I will leave other conditions of not null values blank this time
while($rowImg = $resImg->fetch_object()) { ?>
    <div>
        <img data-u="image" src="img/<?=$rowImg->img_1;?>" />
        <img data-u="thumb" src="img/<?=$rowImg->img_1;?>" />
    </div>
<?php } ?>

请忽略代码中的任何语法错误或拼写错误,我只是想找到解决此问题的方法。

以下是轮播的示例:https://www.gitours.ge/index.php?action=tours_georgia&full_id=22&lang=

2 个答案:

答案 0 :(得分:0)

好的,我就这样做了:

  <?php
    $resFullTours = $db->query("$query");
    $rowFullTours = $resFullTours->fetch_object();
?>

<?php 
            $image1 = $rowFullTours->img_1;
            if (!empty($image1)) {
        ?>
        <div>
            <img data-u="image" src="img/gallery/<?=$image1;?>" />
            <img data-u="thumb" src="img/gallery/<?=$image1;?>" />
        </div>
        <?php } ?>
        <?php 
            $image2 = $rowFullTours->img_2;
            if (!empty($image2)) {
        ?>
        <div>
            <img data-u="image" src="img/gallery/<?=$image2;?>" />
            <img data-u="thumb" src="img/gallery/<?=$image2;?>" />
        </div>
        <?php } ?>
        <?php 
            $image3 = $rowFullTours->img_3;
            if (!empty($image3)) {
        ?>
        <div>
            <img data-u="image" src="img/gallery/<?=$image3;?>" />
            <img data-u="thumb" src="img/gallery/<?=$image3;?>" />
        </div>
        <?php } ?>
        <?php 
            $image4 = $rowFullTours->img_4;
            if (!empty($image4)) {
        ?>
        <div>
            <img data-u="image" src="img/gallery/<?=$image4;?>" />
            <img data-u="thumb" src="img/gallery/<?=$image4;?>" />
        </div>
        <?php } ?>
        <?php 
            $image5 = $rowFullTours->img_5;
            if (!empty($image5)) {
        ?>
        <div>
            <img data-u="image" src="img/gallery/<?=$image5;?>" />
            <img data-u="thumb" src="img/gallery/<?=$image5;?>" />
        </div>
        <?php } ?>
        <?php 
            $image6 = $rowFullTours->img_6;
            if (!empty($image6)) {
        ?>
        <div>
            <img data-u="image" src="img/gallery/<?=$image6;?>" />
            <img data-u="thumb" src="img/gallery/<?=$image6;?>" />
        </div>
        <?php } ?>
        <?php 
            $image7 = $rowFullTours->img_7;
            if (!empty($image7)) {
        ?>
        <div>
            <img data-u="image" src="img/gallery/<?=$image7;?>" />
            <img data-u="thumb" src="img/gallery/<?=$image7;?>" />
        </div>
        <?php } ?>
        <?php 
            $image8 = $rowFullTours->img_8;
            if (!empty($image8)) {
        ?>
        <div>
            <img data-u="image" src="img/gallery/<?=$image8;?>" />
            <img data-u="thumb" src="img/gallery/<?=$image8;?>" />
        </div>
        <?php } ?>
        <?php 
            $image9 = $rowFullTours->img_9;
            if (!empty($image9)) {
        ?>
        <div>
            <img data-u="image" src="img/gallery/<?=$image9;?>" />
            <img data-u="thumb" src="img/gallery/<?=$image9;?>" />
        </div>
        <?php } ?>
        <?php 
            $image10 = $rowFullTours->img_10;
            if (!empty($image10)) {
        ?>
        <div>
            <img data-u="image" src="img/gallery/<?=$image10;?>" />
            <img data-u="thumb" src="img/gallery/<?=$image10;?>" />
        </div>
        <?php } ?>

答案 1 :(得分:0)

您发布的答案不是DRY,而fetch_object()将强制您按名称提名每一列。按名称访问列将强制您编写冗长的代码块或具有可变变量命名的较短代码块(大多数人都会尽量避免)。

我在array_filter()上使用fetch_row()编写了一个简单的DRY代码块,用于从非空列值生成图像标记。

如果您的C:\Users\..\Output\1Complete_1cwa.pdb Traceback (most recent call last): File "Main_Program.py", line 3353, in <module> main() File "Main_Program.py", line 156, in main EM_obj1.Secondary_Structure(code, flag) #### This will extract dssp File "C:\Users\..\Output\Module_ContMat.py", line 369, in Secondary_Structure d = DSSP(model, compcode1) File "c:\Python27\lib\site-packages\Bio\PDB\DSSP.py", line 303, in __init__ dssp_dict, dssp_keys = dssp_dict_from_pdb_file(in_file, dssp) File "c:\Python27\lib\site-packages\Bio\PDB\DSSP.py", line 133, in dssp_dict_from_pdb_file stdout=subprocess.PIPE, stderr=subprocess.PIPE) File "c:\Python27\lib\subprocess.py", line 711, in __init__ errread, errwrite) File "c:\Python27\lib\subprocess.py", line 959, in _execute_child startupinfo) WindowsError: [Error 2] The system cannot find the file specified 是用户输入,请确保在查询中使用之前进行某种形式的清理。

$up_id

如果您在此表上运行该代码:

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

您的输出源代码如下所示:

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;

*我在每对之后添加了换行符,以便于阅读。