Autor Zpráva
Kalicvoda_2
Profil *
nazdar,
porad se mi zobrazuje Fatal error: Call to a member function bind_param() on a non-object
ale ja tomu nejak nerozumim rekl bych ze kod mam spravne (dole je utrzek kodu) a pochopil jsem to tak ze mam spatne prikaz na databazi proto bind_param nebyl predam zadny "objekt".
-databazi jsem zkontroloval to mam vporadku (myslim ze existuji sloupce a tabulka)
-snazil jsem se chybu najit tak jsem si vytiskl predavane pole ci promenne a bylo to v poradku echem hozeno na obrazovku.
Poradite mi? :(
finc
Profil
Pro result byste vždy měl použít ověření, zda projde či nikoli.
Stejně tak Vám vrátí chybu i close(), jelikož nebude mít co uzavřít.

Př.

if ($result = $mysqli->query($query)) {

}


Lepší by možná bylo ukázat kus kodu, který Vám toto způsobuje.
Kalicvoda_2
Profil *
Pravda, omlouvam se ja zapomnel :)
to je cast tridy ktera obsahuje tu chybu:
try{
$this->vloz=$this->spojen->prepare("INSERT INTO produkt VALUES(?, ?, ?, ?, ?, ?, ?, ?)");
$this->vloz->bind_param( "sdsssssi", $_POST['co'], $_POST['ko'], $_POST['liv'], $_POST['pro'], $_POST['ste'], $_POST['nejaky'], $_POST['te'], $_POST['xt'] );
if($this->vloz->execute()){
$this->presmeruj(1);
}else{
throw new Exception();
}
}catch(Exception $mad){
die('Nevyplnil jsi nekterou polozku.');
}
finc
Profil
No nevím, koukám na to, ale nevypadá to na chybu.
Jediné co mě napadá je, jak vzniká to $this->spojen, pokud máte nějakou svou vlastní třídu pro mysqli, tak bych viděl chybu tam.
Hlásí Vám to, že v danném objektu nemůže metodu bind_param nalézt.
Kalicvoda_2
Profil *
prihlasovaci funkci mam v jine metode teto tridy, kterou vola automaticky konstruktor.
vypada takto:
try{
$this->spojen = new mysqli( "localhost", "nick", "heslo", "database" );
if( mysqli_connect_errno()){
throw new Vyjimka("Nepovedlo se pripojit k databazi.");}
}catch( Vyjimka $hla64 ){
die( $hla64->getMessage() );
}
Ale s vasimi slovy to uz nejak opravim diky.
Z toho psat chvili script a pak 4 hodiny zjistovat kde je chyba mi uz beha mraz po zadech
rabbit
Profil
Ono to IMHO nehlásí, že v daném objektu (instanci objektu) nemůže metodu bind_param nalézt, ono to hlásí, že se snažíte volat metodu na něčem, co vůbec není instance objektu.

Tzn. v následujícím řádku ...
$this->vloz=$this->spojen->prepare("INSERT INTO produkt VALUES(?, ?, ?, ?, ?, ?, ?, ?)"); 

voláte metodu prepare() na instanci objetku mysqli, kterou máte uloženu v proměnné $this->spojen. Návratovou hodnotu tohoto volání pak ukládáte do proměnné $this->vloz.

z dokumentace:
mysqli_prepare() returns a statement object or FALSE if an error occured.


Takže byste měl určitě testovat, jestli v proměnné $this->vloz máte uložen statement object nebo boolean, na kterém toho moc nenavoláte ;-)

Možná by pomohlo celý zmíněný řádek dát do podmínky if a následující řádek provést podmíněně.
Nebo si otestovat po provední prvního řádku (pomocí is_object($prom) nebo pomocí is_a($prom, 'class name')) co je uloženo v proměnné $this->vloz.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0