Mysqli准备查询不起作用
我正在从数据库中提取图像。我写了下面给出的PHP脚本,只有while循环工作中的“echo”语句,但变量不显示来自数据库的值。换句话说,只有html正在工作。Mysqli准备查询不起作用
这里没有任何错误。 我不知道这是什么问题。
帮帮我。 谢谢!
$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>
";
}
将您的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中的变量数。
在这里看到:
What is the difference between single-quoted and double-quoted strings in PHP?
这与你的echo语句您的报价问题。你有一个双引号和单引号的组合。在PHP单引号将显示的东西,因此你的变量不会被显示。因此,您的回声声明需要分解为多个串接,以便正确显示您想要的内容。请注意,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的速记符号在这里看到:在HTML标记这回声PHP变量的页面,而。这减少了你必须处理的引号和字符串的数量,并且更容易处理,因为这是直接的HTML。如果大多数内容将使用HTML(它是),并且您只需添加一些PHP变量,那么我肯定会推荐关闭您的PHP?>并使用简写。
只是为了记录:没有编辑可以挽救这个答案,这与问题*和*本身是错误的无关 –
与您建议的一个relacing语法后加入的,而不是列名“*”我得到这个错误 “用尽67108864个字节允许内存大小(试图分配4294967296个字节)” –
好吧,我已经看到了在此之前的错误。原因是你的表的定义,你试图选择的一个列是一个非常大的类型。我在使用LONGTEXT类型代替TEXT时得到了它。 –