Ausgabe von fetch_row

  • PHP

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Radinator.

    Ausgabe von fetch_row

    Hallo,

    ich ein Problem bei der Auswertung folgender SELECT-Abfrage.

    PHP-Quellcode

    1. $db_result = $mysqli->query("SELECT 'id' FROM conversations WHERE (ownerid like '" . $user['ID'] . "') ORDER BY id DESC");


    Wenn ich dann

    PHP-Quellcode

    1. $conversation = $db_result->fetch_row();
    2. var_dump($conversation);

    mache, kommt folgende Ausgabe:
    array(1) { [0]=> string(2) "id" }

    Woran kann das liegen?

    Ich würde gerne mit

    PHP-Quellcode

    1. $conversation['id']

    die ID auslesen... leider ohne Erfolg:
    Undefined index: id in /home/.sites/84/site8931341/web/quickmind/quickclip/conversations/conversation.php on line 29


    Ich hoffe jemand kann mir bei meinem Problem helfen.

    EDIT: Hat sich erledigt.

    In der Select-Anweisung darf das "id" nicht in Klammern stehen...
    Auf der Suche nach Coding-Kursen auf Lence.at

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „KingTimon“ ()

    KingTimon schrieb:

    ownerid like '" . $user['ID'] . "'
    Ooooo...ich seh schon: SqlInjection Incomming (Prepared Statements)

    KingTimon schrieb:

    Woran kann das liegen?
    Würd eher sagen, weil dein fetch_row ein Array liefert, welches du mit zahlen index und ned mit string index ansprichst.
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Danke @Radinator für die Antwort. Ich habe mir den Beitrag zu den Prepared Statements durchgelesen, verstehe trotzdem leider nicht worum's da überhaupt geht... Ich möchte natürlich so sicher wie nur möglich arbeiten - wie stelle ich das an?
    Auf der Suche nach Coding-Kursen auf Lence.at

    KingTimon schrieb:

    worum's da überhaupt geht
    Es geht darum, dass du Eingaben, die der User mach, Injectionsicher machst. Wenn etwa der (böswillige) User in ein Feld, in der er den Namen eingeben soll, einfach Hacker'); DROP TABLE `User`; -- eingibt, kann er dir damit die Datenbank schrotten/Tabelle löschen. Hier ein Tutorial von EDR.

    KingTimon schrieb:

    wie stelle ich das an?
    Du erstellst Platzhalter in deinem SQL Query, an welche du dann deine Eingaben (die du vorher validiert hast) einbinden. So wird dann nicht der Befehl ]Hacker'); DROP TABLE `User`; -- ausgeführt, sondern (meinetwegen) der string ]"Hacker'); DROP TABLE `User`; --" im Feld Name eingetragen.

    Zum validieren: Wenn du einen Blog machst oder ein Gästbuch hast, dann immer den Input aus dem Kommentarbereich durch htmlspecialchars validieren. Dadurch kannst du etwa XSS eindämmen). Wenn z.b jemand hergeht und in das Kommentarfeld einen string eingibt, der beim Aufrufen des Gästebuches eine Meldung anzeigt, die Benutzer einfaben abfischt, dann kannst du das damit verhindern.

    Edit: Hier noch ein paar Links zu Prepared Statements:
    php.net
    w3school.org
    stackoverflow.com
    WikipediaDE
    WikipediaEN
    php-einfach.de

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Danke @Radinator für die Hilfe.

    Würde ich aber mit

    PHP-Quellcode

    1. ​$mysqli->real_escape_string
    denn nicht auch solchen Injection-Gefahren entkommen?
    Auf der Suche nach Coding-Kursen auf Lence.at
    Da kenn ich mich leider zu wenig mit PHP aus. probier einfach mal und wenn es dir die DB schrottet bzw die Tabelle, dann weißt du, dass es nicht geht. :D
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Da ich herzlich wenig Lust habe, dass jtz auf einmal meine Datenbank weg ist, hab ich erstmal bissl herumprobiert und gegoogelt.

    Unter anderem wird der Charakter ' mit einem Backslash \' versehen, wenn realescapestring eingesetzt wird. Reicht das, um Injections zu entgehen?

    Grüße
    Auf der Suche nach Coding-Kursen auf Lence.at
    Probier es einfach aus (nimm halt einen Befehl her, der dir nicht gleich die Datenbank löscht, sondern, was-weiß-ich, eine Tabelle erzeugt. Wenn es klappt, weißt du, dass der Befehl ned ausreicht)

    Ein bisschen Eigeninitiative (dachte nicht, dass ich das jemals sagen muss) ist hier schon von Vorteil
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell