PHP-计算MySQL查询中的元素数将返回两倍的元素数
我正在尝试获取SQL查询结果的列数。每当我尝试使用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()){
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
对于我在同一服务器上遇到的这个问题和其他问题非常有用。