PHP MYSQL INSERT INTO speichert nicht

Wolly300

Lieutenant
Registriert
Mai 2014
Beiträge
514
Hallo zumsammen,

sind schon viele Probleme heute. Mein hoffentlich letztes:

in PHP steht:

PHP:
foreach ($openOrders as $row)
{
    $ID = $row['clientOrderId'];
    $sql = $pdo->prepare("SELECT * FROM Kryptowährungen WHERE Auftrag_ID = $ID");
    $result = $sql->execute(array('Auftrag-ID' => $row['clientOrderId']));
    if ($result == "TRUE") {
        $Auftrag = $statement->fetch();
        if ($Auftrag['Status'] != $row['status'])
        {
            $sql = $pdo->prepare("UPDATE Kryptowährungen SET Wert = ? WHERE Auftrag_ID = ?");
            $result = $sql->execute(array($row['status'],$row['clientOrderId']));
            echo $result."</br>";
            echo "Wurde geupdated!</br>";
        }
    } else {
        if ($row['side'] == "BUY") {
            $Aktion = "Kaufen";
        } else if ($row['side'] == "SELL") {
            $Aktion = "Verkaufen";
        } else {
            $Aktion = $row['side'];
        }
        $G_Wert_BTC = $row['origQty'] * $row['price'];
        $G_Wert_BTC = number_format($G_Wert_BTC, 8, '.', '');

        $sql = $pdo->prepare("INSERT INTO Kryptowährungen (Konto, Wert, Kurs, Aktion, Menge, E_Wert_BTC, G_Wert_BTC, Zeit, Auftrag_ID, Email) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
        $result = $sql->execute(array($Konto, $row['status'], $row['symbol'], $Aktion, $row['origQty'], $row['price'], $G_Wert_BTC, $Zeit, $row['clientOrderId'], $Email));
        echo $Konto."</br>";
        echo $row['status']."</br>";
        echo $row['symbol']."</br>"; 
        echo $Aktion."</br>";
        echo $row['origQty']."</br>";
        echo $row['price']."</br>"; 
        echo $G_Wert_BTC."</br>";
        echo $Zeit."</br>";
        echo $row['clientOrderId']."</br>";
        echo $Email."</br>";
        echo $result."</br>";
        echo "Einen Eintrag in die Datenbank hinzugefügt!!</br>";
    }

//CREATE TABLE `Kryptowährungen` (
//  `Eintrag` int unsigned NOT NULL AUTO_INCREMENT,
//  `Konto` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
//  `Wert` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
//  `Kurs` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
//  `Aktion` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
//  `Menge` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
//  `E_Wert_BTC` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
//  `G_Wert_BTC` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
//  `Zeit` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
//  `Auftrag_ID` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
//  `Email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
//  PRIMARY KEY (`Eintrag`), UNIQUE (`Eintrag`)
//) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


Wenn ich das ausführe kommt bei dem Punkt result keine Ausgabe, auch in der DB ist kein weiterer Eintrag. Alle anderen Werte sind gefüllt. Aber was mache ich falsch. Der User hat schreibrechte.
 
schau mal, was print_r($sql->errorInfo());
nach dem execute() ausgibt.

PDOStatement::execute gibt einen boolean zurueck, d.h. $result enthaelt lediglich einen boolean. musste gucken, wie du das ausgibst.
 
Wie wäre es, wenn Du das Insert mit Deinen Werten als String zusammen setzt und dann dieses SQL-Statement als derselbe User mit einem Tool direkt auf der Datenbank ausführst? Das hilft sehr bei der Fehlersuche.

$result sollte true oder false sein, je nachdem ob das Statement erfolgreich ausgeführt wurde oder fehlgeschlagen ist ... Wenn $result den Wert false hat, dann wird bei echo nichts ausgegeben.
 
Problem war der Name der DB. Ich darf keine umlaute wie in diesemfall ä verwenden.
 
Anscheinend hältst Du nicht viel von Fehlerbehandlung. Denn in dem Fall sollte ja schon der Aufbau der Verbindung fehlgeschlagen sein ...
 
Zeile 4: Im Prepared Statment solltest du die $ID durch ? ersetzen
Zeile 6: $result == "TRUE" > $result === true Die Funktion execute() gibt ein Boolean zurueck

Schau dir bei Gelegenheit auch mal ein paar Frameworks (z.B. Laravel [Kurs: Laravel from Scratch]) an oder zumindest eine Template Engine. (z.B. Twig oder Plates)
 
Wolly300 schrieb:
Problem war der Name der DB. Ich darf keine umlaute wie in diesemfall ä verwenden.

Ich hatte dir auch gestern bereits gesagt in einem deiner anderen Threads, dass du aufhören sollst ständig Deutsch und Englisch in deinem Code zu vermischen.
 
Zurück
Oben