更新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>
答案 0 :(得分:4)
添加一个while循环,
while($row= $sth->fetch( PDO::FETCH_ASSOC )){
echo $row['your_field_name'];
}
或者您可以使用fetchAll
$row= $sth->fetchAll();
print_r($row);