Извлечение PDO возвращает только первую строку [duplicate]
Этот вопрос является точной копией:
PHP PDO Data_length всегда возвращает «0» 1 ответОБНОВЛЕНИЕ 2: Я любезно попросил отметить этот вопрос как дубликат, поскольку он не является дубликатом другого вопроса, который после некоторого исследования я обнаружил проблему и дал эффективный ответ, который не дал тот, кто пометил мой вопрос как дубликат, заявив, что код работал для него. Ну, это работает для него, но это не работает для меня. Я также прочитал много вопросов, где, когда кто-то тестирует код, и он работает для него, он просто помещает примечание в комментарии, подобные этому »Меня устраивает", или что-то подобное. И вместо того, чтобы пометить мой вопрос и позже опубликовать следующий комментарий:
"то, что вы должны были сделать, это отредактировать другой вопрос, а не делать репост с тем же кодом. Извините, но я не буду вновь открывать вопрос. Вчера я опубликовал несколько комментариев под другим вопросом, но не стал отвечать, поэтому в итоге удалил их. Заявить, что с вашим кодом все в порядке, так как я его протестировал."
.. возможно, что он должен сделать, это просто совет в комментариях, и, скорее всего, я мог бы отредактировать оба моих вопроса вместо того, чтобы «спорить» и жаловаться только потому, что я хочу удалить свой вопрос, что сейчас невозможно, и если Я отправлю еще один вопрос, он тоже будет помечен как Дубликат. Это просто очень неудачно. Также я не вижу этого -PDO fetch возвращает только первый ряд как дубликат этогоPHP PDO Data_length всегда возвращает «0»
ОРИГИНАЛЬНЫЙ ВОПРОС: Я использую следующий код для подключения к базе данных, получитьData_length
индекс столбца и рассчитать размер базы данных на основе данных.
По какой-то причине PDO всегда будет возвращать «0», что является значением дляData_length
Индекс в первом ряду. Что бы я ни делал, я получаю только индекс первых строк.
База данных MySQL, движок MyISAM.
Версия PHP: 5.5.38
Версия MySQL: 5.5.50
ОБНОВЛЕНИЕ 1: Ну, так как этот вопрос был отмечен как дубликатэтот Во-первых, я был вынужден изменить исходный код. Ниже приведен новый исходный код, который отлично работает на одном хостинге, но по-прежнему возвращает только первую строку на другом.
// 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
Старый исходный код: Я скопировал этот код изэтот ответ как это было принято как работа. Я не мог комментировать там, потому что мне не хватает репутации.
<!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>