Autor Zpráva
Jiří Ráb
Profil
Ahoj chtěl jsem se vás zeptat jak převést lastInsertId, který mi vrací string na integer abych ho mohl vložit do tabulky (jako foreign key).Dík
Keeehi
Profil
$id = (int)($db->lastInsertId());
Ale opravdu to potřebuješ? Já přímo s PDO nedělal ale zatím jsem žádná data pro databázi přetrvávat nemusel a nic o kontrole typů u PDO jsem na inetrnetu teď v rychlosti také nedohledal.
Jiří Ráb
Profil
Tak jde o to že pokud mi lastInsertId vrátí hodnotu jako string tak já ji nemůžu zapsat do tabulky kde je int foreign key
Keeehi
Profil
Jiří Ráb:
Jenže do databáze se posílá celý dotaz jako jeden řetězec, ne? Takže ty vezmeš string, přetypuješ ho na int a předáš ho PDO. To ten tvůj int vezme, přetypuje ho zpátky na string a připojí ho ke stringu s dotazem.
Jiří Ráb
Profil
no to jsem zkoušel přetypovat ten lastinsertid() na int jak jsi napsal jenže pořad je to string hodnota a tu nebere pdo když to poslu
pcmanik
Profil
Jiří Ráb:
Ukáž ako to posielaš, PDO je úplne jedno či tam posielaš string alebo int. Databáza sa o správne pretypovanie postará.
Preto aj napr. funguje vkladanie čísiel v SQL ako INSERT INTO ... VALUES ('50') a tiež aj VALUES (50).
Keeehi
Profil
var_dump($id);
ti řekne že jde o int, takže problém bude někde jinde.
Jiří Ráb
Profil
$insert_adress="INSERT INTO adresa(ulice,cp,mesto,psc) VALUES (:ulice,:cp,:mesto,:psc)";
    $insert_prepare_adress=$connect->prepare($insert_adress);
    $insert_prepare_adress->bindParam(":ulice",$ulice);
    $insert_prepare_adress->bindParam(":cp",$cp);
    $insert_prepare_adress->bindParam(":mesto",$mesto);
    $insert_prepare_adress->bindParam(":psc",$psc);
    $adresa_stav=$insert_prepare_adress->execute();
    $last_id=(int)$connect->lastInsertId();
kde získám last id
if($adresa_stav==true){
        try{
    $insert_user="INSERT INTO uzivatele(username,heslo,email,krestni_jmeno,prijmeni,pravo,id_adresa) VALUES(:username,:heslo,:email,:krestni_jmeno,:prijmeni,:pravo,:last_id)";
    $insert_prepare_user=$connect->prepare($insert_user);
    $heslo_hash=password_hash($pass1,PASSWORD_DEFAULT);
    $insert_prepare_user->bindParam(":username",$username);
    $insert_prepare_user->bindParam(":heslo",$heslo_hash);
    $insert_prepare_user->bindParam(":email",$email);
    $insert_prepare_user->bindParam(":krestni_jmeno",$name);
    $insert_prepare_user->bindParam(":prijmeni",$surname);
    $insert_prepare_user->bindParam(":pravo",$pravo);
    $insert_prepare_user->bindParam(":ulice",$ulice);
    $insert_prepare_user->bindParam(":cp",$cp);
    $insert_prepare_user->bindParam(":mesto",$mesto);
    $insert_prepare_user->bindParam(":psc",$psc);
    $insert_prepare_user->bindParam(":last_id",$last_id);
    $uzivatel_stav=$insert_prepare_user->execute();

    }catch (PDOException $e){
    $error_message=$e->getMessage();
     $delete="DELETE FROM adresa
     ORDER BY id_adresa desc limit 1";
     $connect->query($delete);
     header("Location:registrace.php?errors=$error_message&username=$username&firstname=$name&surname=$surname&ulice=$ulice&cp=$cp&mesto=$mesto&psc=$psc");
     exit();
     
   }



nechapu proč mi to databaze nechce vzít


SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokensstring
tahle chyba to je


pokud dam na last_id gettype vrací string
Beavis
Profil
Jiří Ráb:
Ale ta chyba se přeci vůbec netýká typu $last_id.
Keeehi
Profil
Beavis:
Jinak řečeno, binduješ parametry které vůbec nemáš v dotazu. V dotazu jich máš jen 7 ale snažíš se jich přidat 11.
Jiří Ráb
Profil
jak je to možný


díky za radu


už to vidím

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0