PDO在while循环中获取结果或boolean

时间:2015-07-18 12:40:11

标签: php html mysql pdo

如果数据库中没有记录,我试图输出带有nil值的HTML表单。但是,如果有记录(可能有多组数据),我想将表单中的值默认为记录中的内容。

所以我有一个PDO查询和获取设置如下:

cost

上述代码的问题是$con = new PDO(...); $con->setAttribute(...); $query = "SELECT DISTINCT data FROM ..."; $stmt = $con->prepare($query); $stmt->execute(); $first_loop = true; //print 1 form if data set is empty while ($first_loop || $obj = $stmt->fetch()) { //process $obj and print form $first_loop = false; } 在处理一组数据后没有指向下一行。如果我从while语句中删除$stmt->fetch(),那么只有在我的记录中至少有一组数据时,一切正常。因为如果没有,我的整个表格都不会被打印出来。

我不确定上述方法是否最符合我的目标,但如果是,我想听听如何改进我的代码以解决错误。

谢谢!

3 个答案:

答案 0 :(得分:1)

您可以检查没有行,如果大于零,则表示数据库包含值。
使用num_rows

$stmt = $con->prepare($query);
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows>0) {  // database contains values
    while ($obj = $stmt->fetch()) {
        //process $obj and print form

    }
}
else{  // form must have null values because no data found on database

}

答案 1 :(得分:1)

您无法在循环中检查您的情况。相反,您可以使用ifisset来检查您的病情

$first_loop = true; //print 1 form if data set is empty. 

    if(isset($first_loop))
    while ($obj = $stmt->fetch()) {
        //process $obj and print form
        $first_loop = false;
    }
    }else{
    $first_loop = false;
    }

答案 2 :(得分:0)

$servername = "localhost";
$username = "user";
$password = "pass";
$dbname = "test";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT DISTINCT data FROM ...";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo $row["data"]."<br>";
    }
} else {
    echo nil;
}
$conn->close();