PHP-计算MySQL查询中的元素数将返回两倍的元素数

PHP-计算MySQL查询中的元素数将返回两倍的元素数,php,mysql,Php,Mysql,我正在尝试获取SQL查询结果的列数。每当我尝试使用count($row)时,表应该只有4个元素,但它显示8个元素,内爆(“,”,$row)显示实际上有8个元素,但输出有点奇怪: 代码片段: $query = $con->query($sql); $rows = array(); error_log($sql); if(!$query){error_log(mysqli_error($con));exit;} while($row = $query->fetch_array()){

我正在尝试获取SQL查询结果的列数。每当我尝试使用
count($row)
时,表应该只有4个元素,但它显示8个元素,
内爆(“,”,$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\u name']

尝试改用rowCount方法。以下是使用mysqli时的代码:

echo $query->num_rows();

这种行为很好,因为数组同时包含索引号和列名,因此您可以方便地通过
$row[0]
$row['colu 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

您将以数组格式获得结果,该格式既有编号数组,也有关联数组

$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
的默认行为是两个索引都具有列名称和数字位置。当您对$行执行
var_dump
时,您会看到类似的情况:

array(
    0 => 'AFI',
    'column_name_1' => 'AFI',
    1 => '001',
    'column_name_2' => '001',
    // and so on
)
fetch\u array()。默认值为
MYSQLI\u两者
给出上述输出。您可以将其更改为
$query->fetch\u array(MYSQLI\u NUM)
以仅获取数字索引,或
$query->fetch\u array(MYSQL\u ASSOC)
以仅获取索引上具有列名的值

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

注意:
$query->fetch_row()
$query->fetch_array(MYSQLI_NUM)
相同(且更短),而
$query->fetch_assoc()
$query->fetch_array(MYSQLI_assoc)
相同。您可能更喜欢这些函数中的一个,而不是将
fetch\u array()
与array notation参数一起使用。

的默认行为是两个函数的索引都具有列名称和数字位置。当您对$行执行
var_dump
时,您会看到类似的情况:

array(
    0 => 'AFI',
    'column_name_1' => 'AFI',
    1 => '001',
    'column_name_2' => '001',
    // and so on
)
fetch\u array()。默认值为
MYSQLI\u两者
给出上述输出。您可以将其更改为
$query->fetch\u array(MYSQLI\u NUM)
以仅获取数字索引,或
$query->fetch\u array(MYSQL\u ASSOC)
以仅获取索引上具有列名的值

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


注意:
$query->fetch_row()
$query->fetch_array(MYSQLI_NUM)
相同(且更短),而
$query->fetch_assoc()
$query->fetch_array(MYSQLI_assoc)
相同。而不是使用数组符号> FETCHYARRAY()/代码>使用数组符号参数,您可能更喜欢那些函数中的一个。

使用<代码> FutChyAsOsCo()/<代码>或使用<代码> MySqLIIAsOCOM > <代码> FETCHY ARRAY()/<代码>同时,考虑使用<代码> JSONY-EnCODE()/<代码>而不是构建JSON。或使用<代码> MySqLIIAsSOC/ > <代码> FETCHYARRAILARY()/>代码>同时,考虑使用<代码> JSONY-EnCODE()/<代码>而不是构建JSON。谢谢您的回答,这真的很有帮助。我最后只是做了一个
json编码
,但是
fetch\u row
对于我在同一台服务器上遇到的这个问题和其他问题非常有用。谢谢你的回答,这真的很有帮助。我最后只是做了一个
json编码
,但是
fetch\u row
对于我在同一服务器上遇到的这个问题和其他问题非常有用。