【问题标题】:PDO fetch returns only first rowPDO fetch 仅返回第一行
【发布时间】:2017-04-17 01:24:00
【问题描述】:

我正在使用以下代码连接数据库,获取Data_length索引列,并根据数据计算数据库大小。

出于某种原因,PDO 将始终返回“0”,这是第一行中Data_length 索引的值。不管我做什么,我只得到第一行索引。

数据库是 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>

【问题讨论】:

  • 因为fetch 总是返回一个行。试着不时阅读手册......
  • 您确实需要阅读手册 ^^^^,但为了帮助您入门,-&gt;fetchAll() 可能会帮助您解决这个特定问题
  • @Fred,这个问题不完全是另一个问题的重复。另一个是错误的,因为它声明 Data_length 返回“0”。这个问题不一样。请重新打开这个,以便我删除另一个。
  • @nospor,实际上我已经这样做了,我也已经尝试过 fetchAll 等。这不是我需要的方法。而且,我已经阅读了一堆关于如何获取数据库大小的其他问题,他们都或多或少地以这种方式接近它。此外,此代码来自另一个检查为正确答案的问题:/。我刚刚添加了错误处理和我的凭据。
  • 抱歉,我看不出这两个问题的代码有什么不同。

标签: php mysql pdo


【解决方案1】:

添加一个while循环,

while($row= $sth->fetch( PDO::FETCH_ASSOC )){ 
   echo $row['your_field_name'];
}

或者你可以使用fetchAll

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

【讨论】:

  • 感谢您的建议,但我已经尝试过类似的方法。但是,如果您查看我的源代码,您会发现我只是在尝试计算数据库大小,并且正如我之前所做的那样,同样的方式,现在它不起作用是非常罕见的。
  • 我选择此作为正确答案,因为它与问题大体相符,即使它不完全符合我的需要。但是,我找到了一种解决方法,现在一切正常。不得不使用不同的 SQL 查询,但最终实现了我的目标
  • 为什么while() 只返回一行? (我正在将 mysqli 准备好的语句转换为 PDO)
猜你喜欢
  • 2012-11-02
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
相关资源
最近更新 更多