Mały problem z prepared statements

0

Siemka, mam dość długie zapytanie, w które chciałbym wstawić 3 zmienne. Niestety wyrzuca mi błąd:

Fatal error: Call to a member function bind_param() on boolean

Już niezbyt mam pomysł co może być przyczyną.

$sql="insert into wp_posts (post_author, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, pinged, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, guid, `menu_order`, `post_type`, `post_mime_type`, `comment_count`)
values (1, current_timestamp(), current_timestamp(), ?, ?, '', 'publish', 'closed', 'closed', '',  ?, '', '', current_timestamp(), current_timestamp(), '', 0, 'blabla', 0, 'ultimate-auction', '', 0)";
$stmt = $con->prepare($sql);
$stmt->bind_param('sss', $postContent, $title, $title2);  
$stmt->execute();

$title oraz $title2 mają taką samą wartość, nie wiem czy robi to jakąś różnicę?

0

To prawdopodobnie dlatego, że metoda prepare zamiast zwrócić obiekt klasy PDOStatement zwraca FALSE, dzieje się tak np. wtedy kiedy SQL który chcesz spreparować jest nieprawidłowy.

https://www.php.net/manual/en/pdo.prepare.php

0
TomRZ napisał(a):

To prawdopodobnie dlatego, że metoda prepare zamiast zwrócić obiekt klasy PDOStatement zwraca FALSE, dzieje się tak np. wtedy kiedy SQL który chcesz spreparować jest nieprawidłowy.

https://www.php.net/manual/en/pdo.prepare.php

Używam mysqli, po podstawieniu dowolnych stringów za znaki zapytania w bezpośrednim zapytaniu do bazy wszystko jest ok

0

Ta sama historia:

https://www.php.net/manual/en/mysqli.prepare.php

otocz swój kod instrukcją try / catch i zobacz o co chodzi, jaki jest błąd.

https://www.php.net/manual/en/language.exceptions.php

0
TomRZ napisał(a):

Ta sama historia:

https://www.php.net/manual/en/mysqli.prepare.php

otocz swój kod instrukcją try / catch i zobacz o co chodzi, jaki jest błąd.

https://www.php.net/manual/en/language.exceptions.php
Pierwszy raz tego używam, tak to powinno wyglądać?

try
            {
                            $stmt->bind_param('sss', $postContent, $title, $title2);
            }
            catch(Exception $e)
            {
                echo $con->error;
            }
0

Nie przeczytałeś do końca https://www.php.net/manual/en/language.exceptions.php

catch(Exception $e)
{
    echo 'ERROR MESSAGE: '.$e->getMessage();
}
0
TomRZ napisał(a):

Nie przeczytałeś do końca https://www.php.net/manual/en/language.exceptions.php

catch(Exception $e)
{
    echo 'ERROR MESSAGE: '.$e->getMessage();
}

poprawiłem w ten sposób, niczego to nie zmieniło :| wciąż pokazuje mi tylko błąd wskazany wcześniej.
Próbując wykonać to zapytanie bez prepared statements dostaję:

Commands out of sync; you can't run this command now

0

Commands out of sync; you can't run this command now

to nie to samo co

Fatal error: Call to a member function bind_param() on boolean

https://stackoverflow.com/questions/614671/commands-out-of-sync-you-cant-run-this-command-now

0
TomRZ napisał(a):

Commands out of sync; you can't run this command now

to nie to samo co

Fatal error: Call to a member function bind_param() on boolean

https://stackoverflow.com/questions/614671/commands-out-of-sync-you-cant-run-this-command-now
Ale czy jeśli to samo zapytanie spróbuję wykonać przez klasyczne mysqli tzn. $con->query i zwróci mi ten błąd, to czy w takim razie prepared statement nie powinien zwrócić właśnie: "Fatal error: Call to a member function bind_param() on boolean"?

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