Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在while循环中获取结果_Php_Mysql_Loops - Fatal编程技术网

Php 如何在while循环中获取结果

Php 如何在while循环中获取结果,php,mysql,loops,Php,Mysql,Loops,我有以下两张桌子 | ID | Name |类别| |----|-------------|----------| |1 |富吧| 3| |2 |巴富| 2| |3 | Baz Foo | 3| |4 | Baz foo 2 | 1| |5 | Baz Foo3 | 1| |3 | Baz Foo | 1| |ID |类别|名称| |----|---------------| |1 |第111类| |2 |第222类| |3 |第3333类| 我想用计数器显示所有类别,例如: Cat111-3

我有以下两张桌子

| ID | Name |类别|
|----|-------------|----------|
|1 |富吧| 3|
|2 |巴富| 2|
|3 | Baz Foo | 3|
|4 | Baz foo 2 | 1|
|5 | Baz Foo3 | 1|
|3 | Baz Foo | 1|
|ID |类别|名称|
|----|---------------|
|1 |第111类|
|2 |第222类|
|3 |第3333类|
我想用计数器显示所有类别,例如:

Cat111-3
Cat222-2
Cat333-2
我试着用下面的方法来做,但不起作用:

$query=mysqli_query('SELECT*FROM gallery');
while($row=mysqli\u fetch\u assoc($query)){
$query_cat=mysqli_query($conn,“从'pics_cat`WHERE id='中选择*”。$row['category'.“'GROUP BY category_name”);
$rowCat=mysqli\u fetch\u assoc($query\u cat);
echo$rowCat['category_name'];
echo$rowCat['cnt'];
}

您没有共享表的名称,但我假设第一个是
Gallery
,第二个是
pics\u cat

如果您的表不是很大,我建议您使用一个连接查询来解决所有问题,这样可以简化脚本的逻辑

$query = mysqli_query($conn, 'SELECT p.Category_name,COUNT(g.ID) AS cnt FROM `gallery` AS g LEFT JOIN `pics_cat` AS p ON p.ID = g.Category GROUP BY p.ID');

while($row = mysqli_fetch_assoc($query)) {
    echo $rowCat['Category_name'];
    echo $rowCat['cnt'];
}
如果您喜欢在循环中使用两个查询,那么从Category表开始,然后移动到gallery就容易多了

$query = mysqli_query($conn, 'SELECT * FROM `pics_cat` ORDER BY ID');

while($row = mysqli_fetch_assoc($query)) {
    $query_count = mysqli_query('SELECT COUNT(ID) AS cnt FROM `gallery` WHERE Category = '.$row['ID'].'');
    $row_count = mysqli_fetch_assoc($query_count);
    echo $row['Category_name'];
    echo $row_count['cnt'];
}

在while循环外部设置一个空数组,并将结果推送到while循环内部的数组中。之后,您可以使用foreach loop.FYI
mysqli_query()显示结果
需要
mysqli
连接对象作为第一个参数。第二个示例最好是在循环外部创建一个准备好的语句,然后在循环中使用参数执行。如果存在在
库中没有条目的类别,您可能需要使用
左连接
,这样,您可以返回0的计数。@FunkFortyNiner准备好的语句不仅有利于安全性。同一条语句准备一次并执行多次要比每次执行定制查询高效得多。此外,盲目信任数据库中的数据几乎与盲目信任用户输入一样糟糕。请参阅“二阶SQL注入”@FunkFortyNiner(在数据库中)如果准备好并使用不同的值执行多次,它不是更快吗?@AndreaOlivato mysqli_query()仍然需要一个mysqli$链接作为第一个参数(如Phil所述)。