我真的无法弄清楚我在这里做错了什么。我正在进行查询以检查数据库表中是否有名为“newCards”的记录。
使用$count
我检查它返回了多少结果:它显示我'1'。但是while循环并没有返回任何东西。我看到的唯一的事情是表格顶部的<th>
,但没有表格记录,而$count
正在给出“1”。这是真的,因为DB中实际存在1条记录。
我该如何解决这个问题?
<?php
$query = $db->prepare("SELECT * FROM `newCards` WHERE `company` = :companyID");
$query->bindParam(":companyID", $enterprise['id'], PDO::PARAM_INT);
$query->execute();
$count = $query->rowCount();
echo $count;
if(empty($query->fetch())){
echo "Geen gevonden";
} else {
?>
<table>
<tr>
<th>Ontvanger</th>
<th>Saldo</th>
<th></th>
</tr>
<?php
while($result = $query->fetch()){
?>
<tr>
<td><?php echo $result['id']; ?></td>
<td>2</td>
<td>3</td>
</tr>
<?php
}
?>
</table>
<?php
}
?>
答案 0 :(得分:1)
$query->fetch()
已经抓取记录。因此,如果没有记录,则下次拨打fetch()
会提取下一个记录或无。在您的情况下,一条记录秒fetch()
不会取任何内容,因此while
永远不会启动。
您可以将代码更改为:
if($count){?>
<table>
<tr>
<th>Ontvanger</th>
<th>Saldo</th>
<th></th>
</tr>
<?php
while($result = $query->fetch()){
// show row
}?>
</table>
} else {
// echo that no rows found
}
答案 1 :(得分:0)
我认为首先执行fetch if,这就是为什么second返回为空, 尝试在条件之前将其分配给var或检查$ cont var
答案 2 :(得分:0)
我相信你想要使用
返回一个由列名索引的数组public class ContractsViewModel : ViewModel, ISelectedObjectDependent
{
// only Interface members shown here
public int ExecutionOrder { get { return 4; } }
public bool NeedsRefresh()
{
return _isVisible;
}
public int QueueCount { get; set; }
public void SelectedObjectsChanged()
{
ContractsItemsSource.Refresh();
RaisePropertyChanged("ContractCount");
RaisePropertyChanged("InfoText");
QueueCount--;
}
}
答案 3 :(得分:0)
由于fetch()
获取第一行,即使在检入empty()
时,它也会在您使用while($result = $query->fetch()){
时尝试获取下一行。您可以检查$count
的值(如u_mulder所示),但是您应该注意rowCount()
手册中的注释(强调我的)
如果关联的PDOStatement执行的最后一条SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数。 但是,并不保证所有数据库都会出现这种情况,不应依赖于便携式应用程序。
您可以使用do..while
结构并检查提取是否成功。如果您使用if(empty($query->fetch())){
更改if (!$row = $query->fetch()) {
,则检查是否有提取的行(因为fetch()
在空结果时返回null)。然后$row
即可使用,您可以在第一个循环发生之前使用它。
<?php
$query = $db->prepare("SELECT * FROM `newCards` WHERE `company` = :companyID");
$query->bindParam(":companyID", $enterprise['id'], PDO::PARAM_INT);
$query->execute();
$count = $query->rowCount();
echo $count;
if (!$row = $query->fetch()) {
echo "Geen gevonden";
} else {
?>
<table>
<tr>
<th>Ontvanger</th>
<th>Saldo</th>
<th></th>
</tr>
<?php
do {
?>
<tr>
<td><?php echo $result['id']; ?></td>
<td>2</td>
<td>3</td>
</tr>
<?php
} while ($result = $query->fetch());
?>
</table>
<?php
}