fetch()在while循环中不起作用

时间:2017-06-27 14:54:18

标签: php mysql

我正在处理我的拼贴项目并且出现了一个问题。 我想创建一个while循环来从数据库中获取所有记录。

我用于SQL语句的代码:

$sql2 = "SELECT * FROM phones WHERE users_id = '$user_id'";
$stm2 = $db->prepare($sql2);
$stm2->execute();

我用于while循环的代码:

<?php while ($record = $stm2->fetch()) :?>
    <div class="col-md-2">
       Some text
    </div>
<?php endwhile; ?>

此循环没有输出。当我运行项目时,没有任何东西出现。

如果我首先尝试获取所有记录然后将var_dump取出,那就没关系。我的意思是我可以看到数据库中有记录,但我不能在循环中使用这些记录。

我也试过了这个代码而且没有任何结果再次出现。

<?php while($record = $stm2->fetch()){
   echo '<div class="col-md-2">';
   echo 'Some text';
   echo '</div>';
}

2 个答案:

答案 0 :(得分:1)

为了让它按照你想要的方式工作,你应该这样做:

首先,选择您想要的确切列。

第二,使用?作为安全的占位符。

第三,准备,然后将参数绑定到您的查询中。我是整数,s是字符串。

执行,然后在获取上运行一段时间。

<?php
    $sql2 = "SELECT col1,col2,col3 FROM phones WHERE users_id = ?";
    $stm2 = $db->prepare($sql2);
    $stmt2->bind_param("i",$user_id);
    $stm2->execute();
    $stmt->bind_result($col1,$col2,$col3);


while($stmt2->fetch()){
echo "<div class='col-md-2'>";
echo $col1;   // echo each iteration out, works just like $result->fetch_assoc()
echo $col2;    // equivalent of $row['col2']; but in prepared statement style because you're binding the rows
echo $col1." plus ".$col2;

echo "</div>";
}
$stm2->close();  // close stmt
$db->close();   // close connection
?>

答案 1 :(得分:0)

试试这个:

$query = "SELECT * FROM phones WHERE users_id = '$user_id'";

if ($result = $mysqli->query($query)) {

    /* fetch associative array */
    while ($row = $result->fetch_assoc()) {
        printf ("%s (%s)\n", $row["FirstName"], $row["LastName"], ...);
    }

    /* free result set */
    $result->free();
}

修改

这只是一个快速而肮脏的例子......你应该确实使用评论

中建议的准备语句

编辑2

从此行中删除, ...printf ("%s (%s)\n", $row["FirstName"], $row["LastName"], ...);如果您没有要从数据库输出任何其他列