Eroare Call to a member function fetch() on a non-object

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
hi_ella
Mesaje:40

Eroare Call to a member function fetch() on a non-object

Salut!
Nu inteleg unde gresesc in urmatoarea functie.

Cod: Selectaţi tot

public function selectSql($table,$where='',$fields='*',$limit='')
      {
          $str="SELECT ".$fields." FROM ".$table;
          if($where!='')
          {             
           $str.=" WHERE ".$where;
           }
           if ($limit!='')
           {
            $str.=" LIMIT ".$limit;
           }
           return $this->stms=$this->conn->query($str);
             }
 
O apelez astfel:

Cod: Selectaţi tot

$whereclause="user=".$_POST['user'];
 $rez=$pdoobj->selectSql("utilizatori",$whereclause,"count(*) as num");
$rez->setFetchMode(PDO::FETCH_ASSOC);
$rezs=$rez->fetch();
   if(empty($rezs))
  {//continua cu instruciunile
} 
Imi da eroarea :

Cod: Selectaţi tot

Fatal error: Call to a member function fetch() on a non-object in C:\wamp\www\PDOwork.class.php on line 58.
Linia 58 este:

Cod: Selectaţi tot

return $this->stms->fetch(PDO::FETCH_ASSOC);
Ar trebui sa utilizez prepared statements? De obicei le utilizez doar la inserari.

Multumesc anticipat !

MarPlo Mesaje:4343
Eroarea spune ca functia fetch() e aplicata la un element care nu e tip obiect.
Poti sa verifici ce contine acel element, cu acest cod:

Cod: Selectaţi tot

var_dump($this->stms);
Daca e false, posibil ceva gresit la interogarea SQL.
Valorile de tip sir la WHERE trebui sa fie intre ghilimele. Incearca sa inlocuiesti in scriptul tau cu acest cod:

Cod: Selectaţi tot

$whereclause = "user='". $_POST['user'] ."'";
 

hi_ella Mesaje:40
Am reusit ! Merci mult !
Am modificat cum ai spus variabila $whereclause:

Cod: Selectaţi tot

$whereclause="user='".$_POST['user']."'";
$rez=$pdoobj->selectSql("utilizatori",$whereclause,"count(*) as num");
$rezs=$rez->fetch(PDO::FETCH_ASSOC); 
Apoi am verificat asa, fiindca imi spunea ca e string .Nu stiu sigur cat de ortodoxa e metoda dar imi da rezultatul corect .

Cod: Selectaţi tot

 if ((int)$rezs['num']===0)
{//
}

Subiecte similare