繁体   English   中英

PHP-对MySQL查询中的元素进行计数会返回两倍的元素数

[英]PHP - Counting elements in MySQL query returns double the number of elements

我正在尝试获取SQL查询结果上的列数。 每当我尝试使用count($row) ,表应该只包含4个元素,但显示为8, implode(",",$row)显示实际上有8个元素,但是输出有点奇怪:

代码片段:

$query = $con->query($sql);

$rows = array();

error_log($sql);
if(!$query){error_log(mysqli_error($con));exit;}
while($row = $query->fetch_array()){
    $rows[]=$row;
}

if(count($rows)==0) { echo "101";   exit; }

echo '{"row":[';
foreach($rows as $key=>$row) {
    error_log(count($row));
    error_log(implode(",",$row));
    error_log($row[0]." ".$row[1]." ".$row[2]." ".$row[3]);
}
echo "]}";

结果:

[Tue May 29 13:47:21 2018] 8
[Tue May 29 13:47:21 2018] AFI,AFI,001,001,Pancho,Pancho,a1d7584daaca4738d499ad7082886b01117275d8,a1d7584daaca4738d499ad7082886b01117275d8
[Tue May 29 13:47:21 2018] AFI 001 Pancho a1d7584daaca4738d499ad7082886b01117275d8

如您所见,八个元素在那里,但是它们只是正确输出的重复,由error_log($row[0]." ".$row[1]." ".$row[2]." ".$row[3]);

有谁知道为什么PHP这样呢? 有没有一种方法来获取查询行上正确数量的元素?

该行为很好,因为该数组同时包含索引号和列名,因此您可以通过$row[0]$row['col_name']方便地访问字段

尝试改用rowCount方法。 如果您使用mysqli,以下是代码:

echo $query->num_rows();

您将获得具有编号数组和关联数组的数组格式的结果。

$query->fetch_array() or $query->fetch_array(MYSQLI_BOTH) // this fetches both type

而这

$query->fetch_array(MYSQLI_ASSOC) // this fetches as associative array 

并且仅用于编号数组

$query->fetch_array(MYSQLI_NUM); // this as numbered array

fetch_array()的默认行为是两个索引的列名都与数字位置相同。 当您对$ row进行var_dump时,您会看到类似以下内容:

array(
    0 => 'AFI',
    'column_name_1' => 'AFI',
    1 => '001',
    'column_name_2' => '001',
    // and so on
)

fetch_array()只需一个参数即可更改此行为。 默认值为MYSQLI_BOTH给出上述输出。 您可以将其更改为$query->fetch_array(MYSQLI_NUM)以仅获取数字索引,或者将$query->fetch_array(MYSQL_ASSOC)更改为仅获取索引中具有列名的值。

当使用其中任何一个时, count()也将给出正确的列数。

注意: $query->fetch_row()$query->fetch_array(MYSQLI_NUM)相同(并且更短),而$query->fetch_assoc()$query->fetch_array(MYSQLI_ASSOC) 与其将fetch_array()与array-notation-argument一起使用, fetch_array()选择其中一个函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM