MySQLi - Problem mit fetch field()
Hallo zusammen,
ich bin seit einigen Tagen dabei eine etwas größere Eigenentwicklung von der MySQL-Schnittstelle auf MySQLi umzubauen.
Bis auf eine ein paar Stellen, an denen ich nicht verstehe wieso ich query statt real_query nutzen muss, läuft es eigentlich ganz gut. Der Unterschied ist doch, dass query "richtige" Ergebnisse zurückliefert und real_query nur true oder false, richtig?
Was mir aber noch wirklich Sorgen macht ist die Funktion fetch_field. Sie wird nur genutzt und den Typ der Datenbankfelder zu bestimmen und die Daten entsprechend zu escapen.
Ich habe eine Datenbanktabelle mit der Kollation utf8_general_ci mit einem Datumsfeld. Datenbankconnection ist auf utf8 eingestellt. Mit der MySQL-Schnittstelle wurde das Feld als Date erkannt, MySQLi liefert
object(stdClass)#6 (13) { ["name"]=> string(4) "Date" ["orgname"]=> string(4) "Date" ["table"]=> string(6) "config" ["orgtable"]=> string(6) "config" ["def"]=> string(0) "" ["db"]=> string(7) "asa_dev" ["catalog"]=> string(3) "def" ["max_length"]=> int(0) ["length"]=> int(10) ["charsetnr"]=> int(63) ["flags"]=> int(4225) ["type"]=> int(10) ["decimals"]=> int(0) }
also ein Integer. Was mache ich falsch bzw. muss ich machen, damit die Spalte wieder als Datumswert erkannt wird?
Viele Grüße
Maik87
ich bin seit einigen Tagen dabei eine etwas größere Eigenentwicklung von der MySQL-Schnittstelle auf MySQLi umzubauen.
Bis auf eine ein paar Stellen, an denen ich nicht verstehe wieso ich query statt real_query nutzen muss, läuft es eigentlich ganz gut. Der Unterschied ist doch, dass query "richtige" Ergebnisse zurückliefert und real_query nur true oder false, richtig?
Was mir aber noch wirklich Sorgen macht ist die Funktion fetch_field. Sie wird nur genutzt und den Typ der Datenbankfelder zu bestimmen und die Daten entsprechend zu escapen.
Ich habe eine Datenbanktabelle mit der Kollation utf8_general_ci mit einem Datumsfeld. Datenbankconnection ist auf utf8 eingestellt. Mit der MySQL-Schnittstelle wurde das Feld als Date erkannt, MySQLi liefert
object(stdClass)#6 (13) { ["name"]=> string(4) "Date" ["orgname"]=> string(4) "Date" ["table"]=> string(6) "config" ["orgtable"]=> string(6) "config" ["def"]=> string(0) "" ["db"]=> string(7) "asa_dev" ["catalog"]=> string(3) "def" ["max_length"]=> int(0) ["length"]=> int(10) ["charsetnr"]=> int(63) ["flags"]=> int(4225) ["type"]=> int(10) ["decimals"]=> int(0) }
also ein Integer. Was mache ich falsch bzw. muss ich machen, damit die Spalte wieder als Datumswert erkannt wird?
Viele Grüße
Maik87
Please also mark the comments that contributed to the solution of the article
Content-ID: 279154
Url: https://administrator.de/contentid/279154
Printed on: December 12, 2024 at 01:12 o'clock
1 Comment
Hi Maik87,
das Beispiel fetch_field funktioniert schon, bringt aber als Ergebnis für die Datentypen einen Dezimalwert.
Um den Datentyp eines Felds abzufragen, kannst du auch die Datenbank-Syntax verwenden. Z.B.:
Als Ergebnis erhält man ein Array mit den Feldinformationen.
Script mit PDO, MySQLi ist mir zuviel "Gefrickel"
Gruß
Günni
das Beispiel fetch_field funktioniert schon, bringt aber als Ergebnis für die Datentypen einen Dezimalwert.
Um den Datentyp eines Felds abzufragen, kannst du auch die Datenbank-Syntax verwenden. Z.B.:
"show columns from temperaturen like 'Datum'"
Als Ergebnis erhält man ein Array mit den Feldinformationen.
Script mit PDO, MySQLi ist mir zuviel "Gefrickel"
<?php
$conn = new PDO("mysql:host=localhost;dbname=test", "guenni", "guenni");
$query = "show columns from temperaturen like 'Datum'";
$stmt = $conn->prepare($query);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE HTML >
<html>
<head>
<title>Untitled</title>
</head>
<body>
<pre>
<?php
echo "<h4>Mit var_dump</h4>";
var_dump($result);
echo "<h4>Mit foreach</h4>";
foreach($result as $key => $value){
echo $key." = ".$value."<br>";
}
echo "<h4>Zugriff auf eine Feldinfo</h4>";
if($result["Type"] == "date"){
echo "Das Feld ".$result["Field"]." ist Datentyp ".$result["Type"];
}
?>
</body>
</html>
Gruß
Günni