Witam, chciałbym się dowiedzieć, na czym polega błąd z którym walczę od godziny.
Próbuje dodać rekord bo prostej tabeli w bazie danych, wykorzystując funkcje prepare i bindValue. Problem w tym, iż przy próbie dodanie otrzymuje błąd:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: parameter was not defined' in C:\xampp\htdocs\ZAPI\Lab4\my_class\UzytkownikDB\uzytkownik.php:40 Stack trace: #0 C:\xampp\htdocs\ZAPI\Lab4\my_class\UzytkownikDB\uzytkownik.php(40): PDOStatement->execute() #1 C:\xampp\htdocs\ZAPI\Lab4\index1.php(38): UzytkownikDB\Uzytkownik->__construct('test', 'test', '75050406054', 'test') #2 {main} thrown in C:\xampp\htdocs\ZAPI\Lab4\my_class\UzytkownikDB\uzytkownik.php on line 40
Oto fragment kodu który odpowiada za utworzenie nowego obiektu, sprawdzenie, czy istnieje rekord z takim peselem w bazie danych, jeśli nie to dodaje.
public function __construct($imie, $nazwisko, $pesel, $firma)
{
parent::__construct($imie, $nazwisko);
$this->pesel = $pesel;
$this->firma = $firma;
$pdo = SQL_connect::connect();
try
{
$stmt = $pdo -> prepare('SELECT * FROM `naukowcy` WHERE Pesel= :pesel');
$liczba = 0;
$stmt -> bindValue(':pesel', $pesel, PDO::PARAM_STR);
$stmt -> execute();
$liczba=$stmt->fetchColumn();
if($liczba > 0)
{
echo 'Naukowiec znajduje sie juz w bazie dancyh.<br>';
}
else
{
$stmt = $pdo -> prepare("INSERT INTO `naukowcy`(`Imie`, `Nazwisko`, `Pesel`, `Nazwa_firmy`) VALUES (:Imie,:Nazwisko,:Pesel,:Nazwa_firmy)");
$liczba=0;
$pesel=$pesel+"";
$stmt->bindValue(':Imie',$imie,PDO::PARAM_STR);
$stmt->bindValue(':Nawisko',$nazwisko,PDO::PARAM_STR);
$stmt->bindValue(':Pesel',$pesel,PDO::PARAM_STR);
$stmt->bindValue(':Nazwa_firmy',$firma,PDO::PARAM_STR);
$liczba += $stmt -> execute();
if($liczba>0)
{
echo 'Dodano nowego naukowca do bazy danych.<br>';
}
else
{
echo 'Nie udalo sie dodac nowego naukowca.<br>';
}
}
}
catch(PDOException $e)
{
echo 'Wystąpił błąd biblioteki PDO: ' . $e->getMessage();
}
}
Jak zmodyfikowałem tą linijke: $stmt = $pdo -> prepare("INSERT INTO
naukowcy(
Imie,
Nazwisko,
Pesel,
Nazwa_firmy) VALUES (:Imie,:Nazwisko,:Pesel,:Nazwa_firmy)");
na: $stmt = $pdo -> prepare("INSERT INTO
naukowcy(
Imie,
Nazwisko,
Pesel,
Nazwa_firmy) VALUES (':Imie',':Nazwisko',':Pesel',':Nazwa_firmy')");
Dodało mi rekord do bazy danych który wyglądał tak:
[:Imie],[:Nazwisko],[:Pesel],[:Nazwa_firmy]. Tak jak by nie podmieniło tych parametrów, pomimo, iż one są przekazywane poprawinie (sprawdzałem).