/购物车表有4个字段; id,用户名,产品ID,图片。我正在尝试显示表格中的所有数据。
<?php
$query = "SELECT * FROM cart WHERE user_name='$username'";
if ($stmt = mysqli_prepare($mysqli, $query)) {
/* execute statement */
mysqli_stmt_execute($stmt);
/* bind result variables */
mysqli_stmt_bind_result($stmt,$username);
/* fetch values */
while ($row=mysqli_stmt_fetch($stmt))
{
答案 0 :(得分:0)
我认为您对mysqli_stmt_bind_result()
的来电不正确。我推荐两件事:
编写mysqli_stmt_bind_result()
的方式,代码仅在表有一列user_name时才有效。
答案 1 :(得分:0)
据我所知,这里有两个问题
mysqli_stmt_bind_param()
。直接在查询中注入变量并不安全,这也是我们准备查询的原因。mysqli_stmt_bind_result()
绑定所选列的确切数量。这需要是您选择的确切列数。要使其工作,您需要在查询中使用占位符?
而不是变量(并使用mysqli_stmt_bind_param()
)。您还应该选择特定列,而不是SELECT *
。如果你执行SELECT *
,如果仍然绑定相同数量的结果,仍然可以使其工作 - 但如果稍后添加一列,代码将会中断。
以下代码已更改为选择特定列,并将其与mysqli_stmt_bind_result()
中绑定(列)的结果相匹配。添加了查询中的占位符,并实现了mysqli_stmt_bind_param()
的使用。
$query = "SELECT id, user_name, produc_id, image FROM cart WHERE user_name=?";
if ($stmt = mysqli_prepare($mysqli, $query)) {
mysqli_stmt_bind_param("s", $username);
/* execute statement */
mysqli_stmt_execute($stmt);
/* bind result variables */
mysqli_stmt_bind_result($stmt, $user_id, $username, $product_id, $image);
/* fetch values */
while ($row=mysqli_stmt_fetch($stmt)) {
// Fetch here
}
}