Błąd wstawiania do mysql/pdo/php

0

Mam kod i jest błąd przy wstawianiu:
Fatal error: Uncaught Error: Call to a member function execute() on boolean in C:\xampp\htdocs\3\adresdodaje.php:28 Stack trace: #0 {main} thrown in C:\xampp\htdocs\3\adresdodaje.php on line 28
I też mam pytanie, który kod według was jest lepszy ten jako komentarz czy ten nie jako komentarz

$nazwa = @htmlspecialchars(addslashes(strtoupper($_GET['nazwa'])));       
$imie = @htmlspecialchars(addslashes(strtoupper($_GET['imie'])));       
$adres_miasto = @htmlspecialchars(addslashes(strtoupper($_GET['miasto'])));       
$adres_kod_pocztowy = @htmlspecialchars(addslashes(strtoupper($_GET['kod_pocztowy'])));       
$adres_ulica = @htmlspecialchars(addslashes(strtoupper($_GET['adres'])));       
$adres_nr_domu = @htmlspecialchars(addslashes(strtoupper($_GET['numer'])));       
$adres_nr_mieszkania = @htmlspecialchars(addslashes(strtoupper($_GET['lokum'])));       
$notatki = @htmlspecialchars(addslashes(strtoupper($_GET['notatki']))); 

//$statement = $db->prepare("INSERT INTO adres (instytucja, nazwa, imie, adres_miasto, adres_kod_pocztowy, adres_ulica, adres_nr_domu, adres_nr_mieszkania, notatki) 
//VALUES ($instytucja, $nazwa, $imie, $adres_miasto, $adres_kod_pocztowy, $adres_ulica, $adres_nr_domu, $adres_nr_mieszkania, $notatki)");

$statement = $db->prepare("INSERT INTO adres(id, instytucja, nazwa, imie, adres_miasto, adres_kod_pocztowy, adres_ulica, adres_nr_domu, adres_nr_mieszkania, notatki, aktywny, ostatnia_zmiana) 
VALUES ( ,:instytucja, :nazwa, :imie, :adres_miasto, :adres_kod_pocztowy, :adres_ulica, :adres_nr_domu, :adres_nr_mieszkania, :notatki, 1 , CURRENT_TIMESTAMP)");
//27 linijka
$statement->execute(array(
    "instytucja" => $instytucja,
    "nazwa" => $nazwa,
    "imie" => $imie,
    "adres_miasto" => $adres_miasto,
    "adres_kod_pocztowy" => $adres_kod_pocztowy,
    "adres_ulica" => $adres_ulica,
    "adres_nr_domu" => $adres_nr_domu,
    "adres_nr_mieszkania" => $adres_nr_mieszkania,
    "notatki" => $notatki
));
1

Z manuala dot. prepare w pdo

If the database server successfully prepares the statement, PDO::prepare() returns a PDOStatement object. If the database server cannot successfully prepare the statement, PDO::prepare() returns FALSE or emits PDOException (depending on error handling).

Tutaj link http://php.net/manual/en/pdo.prepare.php

Co do pytania "co lepsze" - bindowanie parametrów podanych przez użytkownika powinno być zawsze.

Nie używaj @ (małpy) do ukrywania ostrzeżeń. Jest to bardzo zła praktyka. Wystarczy sprawdzić czy dana zmienna get istnieje, aby ostrzeżenia w tym przypadku zniknęły.

Używanie "array()" jest starą składnią i powinno się stosować [].

W środku values masz na samym początku przecinek.
Przejechałem tylko wzrokiem na telefonie, więc błędów może być więcej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1