Mysqli准备查询无法正常工作

时间:2017-03-03 15:49:45

标签: php mysql mysqli pdo

我正在从数据库中提取图像。我编写了下面给出的php脚本,只有while循环中的“echo”语句正在工作,但变量没有显示来自数据库的值。换句话说,只有html正在工作。

没有任何错误。 我不知道是什么问题。

帮帮我。 谢谢 !

$db_username = 'xxxxx';
$db_password = 'xxxx';
$db_name = 'xxxx';
$db_host = 'localhost';
$item_per_page = 9;

$mysqli = new mysqli($db_host, $db_username, $db_password, $db_name);
if ($mysqli->connect_error) {
    die('Error : ('. $mysqli->connect_errno .') '. $mysqli->connect_error);
}

$page_number = filter_var($_POST["page"], FILTER_SANITIZE_NUMBER_INT, FILTER_FLAG_STRIP_HIGH);

if(!is_numeric($page_number)){
    header('HTTP/1.1 500 Invalid page number!');
    exit();
}

$position = (($page_number-1) * $item_per_page);

$results = $mysqli->prepare("select * FROM inserting_discount_product ORDER BY id DESC LIMIT ?, ?");

$results->bind_param("dd", $position, $item_per_page); 

$results->execute(); //Execute prepared Query

$results->bind_result($pro_id, $pro_title, 
$pro_cat,$pro_desc,$pro_price,$pro_img,$pro_discount_price,$pro_discount_percent
age,$product_code); 


while($results->fetch()){ 
                echo "
                <div id='$pro_id' class='col-md-3 col-sm-4 col-xs-12'>

                <h3 style='color:black'; align='center'>$pro_title</h3> 
                <div>

                <img src='../admin_area/product_images/product_pics/$pro_img'  width='180' height='180' /> <br>
                </div>


                <p style='color:black;margin-right:12px'><b>Price: $  $pro_discount_price </b>

                <span style='color:black;text-decoration:line-through;margin-left:15px'>
                <b style='color:red'>Price: $ $pro_price</b>
                </span>

                </p>

                <a href='details.php?pro_id=$pro_id' style='margin-right:10px' class='detail_hover'><b>Details</b></a>
                <span style='font-weight:bolder'>$pro_discount_percentage %</span>
                <a href='index.php?add_cart=$pro_id&product_code=$product_code' style='color:orange;margin-left:10px' class='basket-logo'>
                <span  class='fa fa-shopping-cart fa-2x'></span></a> 


                    </div>

                ";

}

2 个答案:

答案 0 :(得分:0)

最好将您的prepare语句放在IF中,因为如果失败,prepare可以返回一个布尔值。

    if($results = $mysqli->prepare("select * FROM inserting_discount_product ORDER BY id DESC LIMIT ?, ?"))
        {
            $results->bind_param("dd", $position, $item_per_page); 

            $results->execute(); //Execute prepared Query

            $results->bind_result($pro_id, $pro_title, 
            $pro_cat,$pro_desc,$pro_price,$pro_img,$pro_discount_price,$pro_discount_percentage,$product_code); 

            while($results->fetch())
            {
               // ... stuff
            }
            $results->close();
        }
        else { echo $mysqli->error;  }

您可能还应该在SELECT中显式声明返回列而不是使用*。在这一行中,您可能会向表中添加一列,如果您正在执行SELECT *,则所有代码都将立即中断,因为查询将返回比bind_result中的变量更多的列。

答案 1 :(得分:-1)

见这里:

What is the difference between single-quoted and double-quoted strings in PHP?

这是您在echo语句中引用的问题。你有双引号和单引号的混合。在php中,单引号将按原样显示,因此您的变量不会被显示出来。因此,您的echo语句需要分解为连接,以便正确显示您想要的内容。请注意,php使用点运算符进行连接。

例如:

echo "<div id='".$pro_id."' class='col-md-3 col-sm-4 col-xs-12'>

没有任何错误的原因是因为它假设您回显的所有变量都应该作为纯文本回显,因此它实际上将“$ pro_id”写入html作为元素的id而不是变量是什么是

或者,您的标记是很多HTML。您可以将整个while循环转移到html并使用php短代码在循环中获取变量,如下所示:

while($results->fetch()){ 
    //End php here, go into HTML markup.
    ?>

     <div id='<?=$pro_id?>' class='col-md-3 col-sm-4 col-xs-12'>

    ...

    <?php
//Don't forget to add the closing brace to the while loop back in <?php
}

这个方法使用php的速记符号在这里看到:这个回声php变量到html标记页面。这减少了您必须处理的引号和字符串的数量,并且更容易使用,因为这是直接HTML。如果你的大部分内容都是HTML(它是),你只需要添加几个PHP变量,我肯定会推荐关闭你的php?&gt;并使用速记。