Hirdetés

Új hozzászólás Aktív témák

  • Sk8erPeter
    nagyúr

    Nem, ez egy létező sql-ből készített (exportált) .sql file, amit megkaptam, hogy ebből majd rá fogok jönni, hogy hogy épül fel az adatbázis/tábla. Ezért szeretném ezt megnyitni, gondoltam beimportálom phpmyadmin-ba, és ott majd megnézem, lehet akkor le kéne szednem egy third party SQL viewert? Mondjuk az sem oldja meg azt, hogy én kóddal, ebből az adatbázisból ki szeretnék majd nyerni adatokat, tehát mindenképp be kéne valahogy töltenem egy adatbázisba :/

    Más:
    van egy ilyen php kódom:
    $htmlcontent = file_get_contents($html_path);
    $db->exec("INSERT INTO offers (offer_id,description,images) VALUES ('$provider_id','$htmlcontent', '".$_FILES['uploaded_image']['name']."');");
    unlink($html_path);
    echo $htmlcontent;

    A $htmlcontent-ben van egy cca 2-300 karakter hosszó szöveg, ezt szeretném feltölteni az adatbázisba, mégpedig a description mezőbe, ami longtext tipusú. A query lefut, és majdnem mindent megfelelően tölt fel, csak a descriptiont nem, csak 5 karakternyit tölt be a mezőbe valamiért :U utána kiirattam php oldalon a $htmlcontent-et, de abban szépen benne van a szöveg, tehát az adatbázis szarakszik valamiért, és nem tudok rájönni, hogy miért:/

    "Más" utáni részre reagálva:

    A PDO exec() függvényét használod itt? Vagy ez saját wrapper osztály?
    Ha a PDO-é, akkor azonnal felejtsd el, hogy exec() metódus használatával közvetlenül beleraksz felhasználótól érkező adatot. Meg nem ártana, ha kivételeket kezelnél.
    Nem is értem, pont az a lényege a PDO-nak, hogy szépen lehet vele az adatokat kezelni, prepared statementeket lehet vele használni, így escape-elgetni sem kell a karaktereket, épp ez az egyik legjobb benne, de a másik pedig az előkészített query által megvalósítható szép kód - nincs szükség okádék string-összefűzögetésre, mint - bocs - a Te kódodban. :D

    Tele von Zsinór kolléga a PHP topicban belinkelte a saját cikkét a témában, ami elég jól összefoglalja a dolgot:
    http://maerlyn.eu/2011/12/03/pdo.html

    Tehát
    $db->exec("INSERT INTO offers (offer_id,description,images) VALUES ('$provider_id','$htmlcontent', '".$_FILES['uploaded_image']['name']."');");
    FELEJTŐS, HELYETTE:

    $dbh = NULL;

    try {
    // felhasználónév, jelszónál saját adat behelyettesítendő
    $dbh = new PDO("mysql:host=localhost;dbname=test", "root", "root", array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;',
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ));


    // ..............

    $sth = $dbh->prepare('INSERT INTO offers (offer_id,description,images) VALUES (:offer_id, :description, :images)');

    $sth->bindParam(':offer_id', $provider_id, PDO::PARAM_INT);
    $sth->bindParam(':description', $htmlcontent, PDO::PARAM_STR);
    $sth->bindParam(':images', $_FILES['uploaded_image']['name'], PDO::PARAM_STR);
    $sth->execute();

    echo 'Úgy tűnik, minden OK.';
    }
    catch (PDOException $err) {
    echo 'Hiba: ', $e->getMessage();
    }
    catch (Exception $e) {
    echo 'Másik hiba: ', $e->getMessage();
    }

    Itt feltételeztem, hogy az offer_id egy INT.
    Meg természetesen a kivételeket inkább naplózni kéne, és felhasználóbarát üzeneteket kiírni.

    Ja, és a fentivel nagy eséllyel kerülhető el az általad említett probléma.
    Legalábbis remélem. Majd írd meg, mire jutottál.

Új hozzászólás Aktív témák