Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: insert do kilku tabel
Forum PHP.pl > Forum > Przedszkole
peklo
witam
mam taki problem
Chciałbym wykonać rejestrację użytkowników i muszę dodać dane do 3 tabel. Problem polega na tym, że jak mam np insert do trzech tabel i np w drugim zapytaniu jest błąd to pierwszy insert i tak się doda, dwa kolejne natomiast nie. Chciałbym zeby skrypt tak działał,że jeśli w drugim lub trzecin insercie jest błąd to żeby i pierwsze zapytanie również się nie wykonało.
Insert do jednej tabeli wyglada tak. Co i gdzie mam dodać żeby kolejne inserty wykonywały się poprawnie lub nie wykonywały się jeśli jest jakiś błąd. oto częśc kodu. Prosze o pomoc w którym miejscu mam dodać kolejne inserty.

<?php
try {
$con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sql = "INSERT INTO users(username, password) VALUES(:username, :password)";
$stmt = $con->prepare( $sql );
$stmt->bindValue( "username", $this->username, PDO::PARAM_STR );
$stmt->bindValue( "password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR );
$stmt->execute();
return "Rejestracja powiodła sie <br/> <a href='../index.php'>Zaloguj sie</a>";
}catch( PDOException $e ) {
return $e->getMessage();
}

?>

memory
nie ten dział, beginTransaction
peklo
czytałem o tym ale nie wiem jak to zastosować bo miałem jakiś błląd
nospor
To jak sie ma jakis blad to sie go nam pokazuje..... Jak mamy ci pomoc nie wiedzac jakie masz bledy? 5latek skonczyles juz?
peklo
no już dawno jakieś 30 lat temu. A teraz wywala mi taki błąd
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

a kod mam taki

try {
$id_lic .= rand(10000, 99999);
$con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$con->beginTransaction();
$sql = "INSERT INTO users(username, password,id_lic) VALUES(:username, :password,:id_lic)";
$stmt = $con->prepare( $sql );
$stmt->bindValue( "username", $this->username, PDO::PARAM_STR );
$stmt->bindValue( "password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR );
$stmt -> bindValue(':id_lic', $id_lic, PDO::PARAM_STR);

$sql ='INSERT INTO uprawnienia (id_lic,dostep_adm) VALUES (:id_lic,:dostep_adm)';
$stmt -> bindValue(':id_lic', $id_lic, PDO::PARAM_STR);
$stmt -> bindValue(':dostep_adm',1, PDO::PARAM_INT);
$stmt->execute();
return "Rejestracja powiodla sie <br/> <a href='../index.php'>Zaloguj sie</a>";

}catch( PDOException $e ) {
$con->rollBack();
return $e->getMessage();
}
nospor
1) Drugie zapytanie też ma miec prepare
2) Jakis czas temu zarobiles ostrzezenie za niestosowanie bbcode. Kolejny post bez bbcode zakonczy się kolejnym ostrzeżeniem

3) No jak wszystok jest ok to ma byc jeszcze COMMIT

ps: no to po 35 letnim chlopie nie spodziewalbym sie, ze nie umie zadac pytania na forum tongue.gif
peklo
ok wiem że commit na końcu ale w którym miejscu?
nospor
Po wykonaniu wszystkich zapytan - to chyba logiczne smile.gif

U ciebie bedzie to przed
return "Rejestracja powiodla sie <br/> <a href='../index.php'>Zaloguj sie</a>";
peklo
ok mądralo. dodałem

$stmt->execute();
$con->commit();

return "Rejestracja powiodla sie <br/> <a href='../index.php'>Zaloguj sie</a>";

i dodaje mi sie do tabeli uprawnienia a do pierwszej już nie smile.gif

musze Cię trochę pomęczyć żebyśł mi pomógł smile.gif

oki już sobie porzdziłem dzięki
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.