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

标签 php mysql

我正在尝试获取 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 会这样?有没有办法在查询行中获取正确数量的元素?

最佳答案

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 一起使用,您可能更喜欢其中一个函数。

关于PHP - 计算 MySQL 查询中的元素返回双倍的元素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50591100/

相关文章:

python - 使用pymysql连接mysql时出现Flask错误

php - mysql WHERE IN数组字符串/用户名

mysql - 安装 Varnish 后 PHPmyadmin 不工作

php - 如何使用长轮询(最好不用 Comet 或 node.js)?

php - 获取用户IP地址php的权威方法

php - Mysql比较属于同一ID的两行中的值

java - 给定一系列变量(A、B、C ...),如何形成 Sql 字符串 Ex "A=? and B=?...."但只考虑非空变量?

php - Cakephp 403错误不显示自定义页面

php - 在 JavaScript 数组中包含项目

mysql - 用户与游戏数据库多对多连接