PDO-Abruf gibt nur die erste Zeile zurück [duplizieren]
Diese Frage ist ein genaues Duplikat von:
PHP PDO Data_length liefert immer "0" 1 AntwortUPDATE 2: Ich bat Sie, diese Frage als Duplikat zu entfernen, da es sich nicht um ein Duplikat der anderen Frage handelt. Nach einigen Recherchen habe ich das Problem entdeckt und eine wirksame Antwort geliefert, die die Person, die meine Frage als Duplikat markiert hat, nicht angegeben hat Der Code funktionierte für ihn. Nun, es funktioniert für ihn, aber es funktioniert nicht für mich. Ich habe auch viele, viele Fragen gelesen, in denen jemand, wenn er den Code testet und dieser für ihn funktioniert, einfach eine Notiz in die Kommentare wie diese "Für mich geht da "oder ähnliches. Und anstatt meine Frage zu markieren und später den folgenden Kommentar zu posten:
"Was Sie hätten tun sollen, war, Ihre andere Frage zu bearbeiten, anstatt sie mit demselben Code erneut zu veröffentlichen. Entschuldigung, aber ich werde die Frage nicht erneut öffnen. Ich habe gestern unter Ihrer anderen Frage ein paar Kommentare gepostet, habe mich aber nicht darum gekümmert, sie zu löschen. Ich habe festgestellt, dass an Ihrem Code nichts falsch war, seit ich ihn getestet habe."
.. vielleicht sollte er nur einen Rat in den Kommentaren geben und höchstwahrscheinlich hätte ich beide meine Fragen bearbeiten können, anstatt mich "streiten" und beschweren zu müssen, nur weil ich meine Frage löschen möchte, was jetzt unmöglich ist, und Wenn ich eine andere Frage stelle, wird diese natürlich auch als Duplikat markiert. Das ist einfach sehr unglücklich. Auch ich sehe das nicht -PDO-Abruf gibt nur die erste Zeile zurück als Duplikat von diesemPHP PDO Data_length liefert immer "0"
ORIGINAL FRAGE: Ich verwende den folgenden Code, um eine Verbindung zur Datenbank herzustellen. Rufe das @ aData_length
Indexspalte, und berechnen Sie die Datenbankgröße basierend auf den Daten.
Aus irgendeinem Grund gibt das PDO immer "0" zurück. Dies ist der Wert für dasData_length
index in der ersten Zeile. Was auch immer ich tue, ich bekomme nur den ersten Zeilenindex.
Die Datenbank ist MySQL, die Engine MyISAM.
PHP Version: 5.5.38
MySQL Version: 5.5.50
UPDATE 1: Nun, da diese Frage als Duplikat von @ markiert wurDie one, ich war gezwungen, den Quellcode zu ändern. Das Folgende ist der neue Quellcode, der auf einem Hosting einwandfrei funktioniert, auf einem anderen jedoch nur die erste Zeile zurückgibt.
// 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
Der alte Quellcode: Ich habe diesen Code von @ kopiediese Antwort wie es als funktionierend akzeptiert wurde. Ich konnte dort keinen Kommentar abgeben, da ich nicht genug Ansehen habe.
<!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>