PDO提取仅返回第一行

时间:2016-10-08 17:22:05

标签: php mysql pdo myisam datalength

更新2: 我恳请将此问题标记为重复,因为它不是另一个问题的副本,经过一些研究后我发现问题并提供了一个有效的答案,标记我的问题的人没有提供说明该代码适用于他。嗯,它对他有用,但它不适合我。我还阅读了许多问题,当有人测试代码并且它适用于他时,他只是在这样的评论中添加注释" 它适用于我"或者其他什么类似。而不是标记我的问题,然后发布以下评论:

" 您应该做的是编辑您的其他问题,而不是使用相同的代码重新发布。对不起,但我不打算重新打开这个问题。我昨天在你的另一个问题上发了几条评论,但没有回复,所以我最后删除了它们。说明自我测试以来你的代码没有任何问题。"

..也许他应该做的只是评论中的建议,而且很可能我可以编辑我的两个问题,而不是必须“争论”#34;抱怨只是因为我想删除我的问题,现在这是不可能的,如果我发布另一个问题,它显然也会被标记为重复。这非常不幸。 此外,我没有看到这一点 - PDO fetch仅返回第一行,因为此 PHP PDO Data_length的副本始终返回“0”

原始问题: 我使用以下代码建立与数据库的连接,获取Data_length索引列,并根据数据计算数据库大小。

由于某种原因,PDO将始终返回" 0",这是第一行中Data_length索引的值。无论我做什么,我只获得第一行索引。

数据库是MySQL,引擎MyISAM。

PHP版本:5.5.38
MySQL版本:5.5.50

更新1: 好吧,因为这个问题被标记为this一个副本,我被迫改变了源代码。以下是新的源代码,它在一个托管上工作正常,但仍然只返回另一个托管的第一行。

// START GET DATABASE SIZE
    // Connect to database
    $conn = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);

    // Execute query
    $stmt = $conn->query('SHOW TABLE STATUS');

    // Get size from array
    $size = $stmt->fetch(PDO::FETCH_ASSOC)["Data_length"];

    // Set values to variables for use
    $decimals = 4;
    $mbytes = round($size/(1024*1024),$decimals);
    $kilobytes = round(($size / 1024) * 10);
    echo $kilobytes;
    // END GET DATABASE SIZE

旧的源代码: 我已经从this answer复制了此代码,因为它已被接受为有效。我没有评论,因为我没有足够的声誉。

<!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>

1 个答案:

答案 0 :(得分:4)

添加一个while循环,

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

或者您可以使用fetchAll

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