Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.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 PDO fetch只返回第一行_Php_Mysql_Pdo - Fatal编程技术网

Php PDO fetch只返回第一行

Php PDO fetch只返回第一行,php,mysql,pdo,Php,Mysql,Pdo,我使用以下代码连接数据库,获取Data\u length索引列,并根据数据计算数据库大小 出于某种原因,PDO将始终返回“0”,这是第一行中数据长度的值。无论我做什么,我只得到第一行索引 数据库是MySQL,MyISAM引擎 PHP版本:5.5.38 MySQL版本:5.5.50 这是源代码 <!DOCTYPE html> <head> <title></title> </head> <body> <?php try

我使用以下代码连接数据库,获取
Data\u length
索引列,并根据数据计算数据库大小

出于某种原因,PDO将始终返回“0”,这是第一行中
数据长度的值。无论我做什么,我只得到第一行索引

数据库是MySQL,MyISAM引擎

PHP版本:5.5.38
MySQL版本:5.5.50

这是源代码

<!DOCTYPE html>
<head>
<title></title>
</head>
<body>

<?php
try {
    error_reporting(-1);
    $host_name  = "my_host";
    $database   = "my_db";
    $user_name  = "my_user";
    $password   = "my_pwd";
    $conn = new PDO("mysql:host=$host_name;dbname=$database", $user_name, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sth = $conn->query('SHOW TABLE STATUS');
    $dbSize = 0;
    $row = $sth->fetch(PDO::FETCH_ASSOC);
    $dbSize = $row["Data_length"];
    $decimals = 2;  
    $mbytes = round($dbSize/(1024*1024),$decimals);
    echo $dbSize . "\n" . $row["Data_length"];
    } catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
?>
</body>
</html>

添加一个while循环

while($row= $sth->fetch( PDO::FETCH_ASSOC )){ 
   echo $row['your_field_name'];
}
或者您可以使用
fetchAll

$rows = $sth->fetchAll();
print_r($rows);

因为
fetch
总是返回一行。试着不时地阅读手册……你确实需要阅读手册^^^^^^^,但要开始阅读,也许会帮助你完成这一特定任务issue@Fred,这个问题并不完全是另一个问题的重复。另一个是错误的,因为它声明Data_length返回“0”。这个问题是不同的。请重新打开这一个,这样我就可以删除另一个。@nospor,事实上我已经这样做了,我也已经尝试了fetchAll等。这不是我需要的方法。而且,我已经读过一些关于如何获得数据库大小的其他问题,它们或多或少都是以这种方式处理的。此外,此代码来自另一个被检查为正确答案的问题:/。我刚刚添加了错误处理和我的凭据。对不起,我看不出这两个问题的代码有什么不同。谢谢你的建议,但我已经尝试过类似的方法。但是,如果你看一下我的源代码,你会发现我只是想计算数据库的大小,就像我以前做的一样,现在它不起作用是非常罕见的。我选择这个作为正确的答案,因为它与这个问题基本相符,即使它不是我所需要的。然而,我找到了一个解决办法,现在一切都很好。不得不使用不同的SQL查询,但最终实现了我的目标为什么
while()
只返回一行?(我正在将mysqli准备的语句转换为PDO)