Hirdetés

Hirdetés

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

  • Sk8erPeter

    nagyúr

    válasz rootkiller #10716 üzenetére

    $stmt = $db->prepare("UPDATE `event` SET `name`=[:evName],`date`=[:evDate],`guest`=[:evGuest],
    `prLoc`=[:evPrLoc],`prPre`=[:evPrPre],`pLoc`=[:evPLoc],`pAdr`=[:evPAdr],`doors`=[:dvDoors],`fb`=[:evFB]
    WHERE `id` =" . $_GET['id']);

    Ez így ROSSZ. Egyrészt ez a tömbszerű szintaktika nem kell (ez honnan jött?), tehát az rossz, hogy `name`=[:evName], helyette legyen `name`=:evName (ugyanígy a többi paraméternél is), másrészt pontosan az volt az egésznek a lényege, hogy ne legyen konkatenálva (összefűzve) a query, hanem legyen prepared statement - ergo ez a WHERE `id` =" . $_GET['id'] teljesen rossz, azt pontosan ugyanúgy kell helyettesíteni egy paraméterrel, mint az összes többit, például: WHERE `id` =:id, aztán majd az :id paraméternek megfeleltetsz egy megfelelő párt.

    A hibaüzenet, vagyis az, hogy "PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in...", valószínűleg azért van, mert elgépelted, ez van a query-dben:
    `doors`=[:dvDoors]
    egyrészt megint csak ez a tömbös szintaktika rossz, a helyes a dvDoors helyett az evDoors lenne a korábbiak alapján, meg az alapján, amit az array_intersect_key-nek átadtál (ott 'evDoors'=>0 szerepel, magyarul itt a query-ben d-t írtál véletlenül), tehát azt cseréld le erre:
    `doors`=:evDoors

    Természetesen ahhoz, hogy az :id paraméternek megfelelő rész is működjön, a $params tömbödbe bele kell passzírozni még az id-t is, szóval így néz ki (ha el nem gépeltem):

    $input = $_POST;
    $input['id'] = ( isset($_GET['id']) ? $_GET['id'] : 0);

    $db = new PDO('mysql:host=localhost;dbname=hangar', 'root', 'root');
    $db->query("SET NAMES 'utf-8';");
    $db->query("SET CHARACTER SET UTF8");

    $stmt = $db->prepare('UPDATE `event` SET `name`=:evName,`date`=:evDate,`guest`=:evGuest,
    `prLoc`=:evPrLoc,`prPre`=:evPrPre,`pLoc`=:evPLoc,`pAdr`=:evPAdr,`doors`=:evDoors,`fb`=:evFB
    WHERE `id`=:id');
    $params = array_intersect_key($input, array('evName'=>0,'evDate'=>0,'evGuest'=>0,'evPrLoc'=>0,'evPrPre'=>0,'evPLoc'=>0,'evPAdr'=>0,'evDoors'=>0,'evFB'=>0,'id'=>0));

    $stmt->execute($params);

    Sk8erPeter

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