PHP - 在while循环中存在检查行

时间:2017-06-14 01:23:43

标签: php html mysqli

我需要检查while循环中的表是否存在记录。如果没有,我想显示一条消息。从我所做的代码中,如果存在行,它也将输出消息。以下是代码,

<?php 
$mysqli = new mysqli("localhost", "root", "", "my_dev");

/* check connection */
if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    die();
}

/* create a prepared statement */
if ($stmt = $mysqli->prepare("SELECT * FROM user WHERE staff_id=?")) 
{
    /* bind parameters for markers */
    $stmt->bind_param("i", $id);

    /* execute query */
    $stmt->execute();

    /* store result */
    $stmt->store_result();

    /* bind result variables */
    $stmt->bind_result($t_id, $name, $ic_no);

    /* fetch value */
    while ($row = $stmt->fetch()) { ?>

        <div class="form-group">
            <input type="text" name="nama[]" id="nama" class="form-control" 
            placeholder="Nama" value="<?php echo $name?>" >
        </div>

        <div class="form-group">
            <input type="text" name="ic_no[]" id="ic_no" class="form-control"  
            placeholder="No. K/P" value="<?php echo $ic_no; ?>" >
        </div>

    <?php }

    if ($row < 1) {
        echo "No records!";
    }

    /* close statement */
    $stmt->close();

} 

检查病情的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您需要问的问题是&#34;什么是$row?&#34;

让我们逐步完成您的代码,假设while以上的所有内容都是正确的(我不知道,我不会使用mysqli):

while ($row = $stmt->fetch()) { 

只要$stmt->fetch()返回一个值,在这种情况下很可能是一个对象,$row接收该对象,whle认为这是真的,执行将转到下一行。当$stmt->fetch()用完行时,会返回false并退出while循环。

与此同时,当您进入循环时,您可以访问数据库中的数据,通常是通过引用类似$row->columnName

的内容来访问数据。

所以你的while循环会是这样的:

while($row = $stmt->fetch()) {
    print "I'm column one: " . $row->columnOnesName . "<br>";
    print "I'm column two: " . $row->columnTwosName . "<br>";
}

当行用完时,$row会获得$stmt->fetch()给出的值,最有可能是null。这个评估结果不是真的,而while循环则会中断。

如果你那么做

if ($row < 1) {
如果null&lt;

那么它将跟随分支。 1。

查看是否有任何数据行的快速简便方法是简单地使用标记。

$isEmpty = true;
while($row = $stmt->fetch()) {

  $isEmpty = false;

  // display table's output with $row->columnNames
}

if($isEmpty) {
   print "no rows in table";
}