如果数据库中没有记录,我试图输出带有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()
,那么只有在我的记录中至少有一组数据时,一切正常。因为如果没有,我的整个表格都不会被打印出来。
我不确定上述方法是否最符合我的目标,但如果是,我想听听如何改进我的代码以解决错误。
谢谢!
答案 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)
您无法在循环中检查您的情况。相反,您可以使用if
和isset
来检查您的病情
$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();