Eroare: Call to a member function num_rows() on boolean

cadou
Mesaje: 296

Eroare: Call to a member function num_rows() on boolean

Am intr-un fisier cateva linii de cod care primesc eroare:

Cod: Selectaţi tot

Fatal error: Call to a member function num_rows() on boolean in cale_fisier on line 115
In codul php:

Cod: Selectaţi tot

public function get_profile_info($uid_username) { if(empty($uid_username)) return false; $sql = 'SELECT u.user_id,u.username,u.email,u.email_visibility,u.sex,u.main_image,u.birth_date,u.city_id,u.country_id,u.interest_id,u.zodiac,u.web_confirmed,u.description,u.vote_points,u.visits, u.stickers,u.gifts,u.activity_points,u.bonus_points,u.gift_points,u.total_points,u.coins,u.comments,u.log_records,u.virtual_seif,u.blog_posts, u.webpage,u.facebook,u.hi5,u.relationship,u.education,u.registration_date,u.last_login,u.meta_data, c.name AS country,ci.name AS city,intr.content AS interest FROM '.TBL_USERS.' u '; if(!is_numeric($uid_username)) { $sql.= ' USE INDEX(username) '; } $sql.= ' INNER JOIN '.TBL_COUNTRIES.' c ON c.country_id=u.country_id INNER JOIN '.TBL_CITIES.' ci ON ci.city_id=u.city_id INNER JOIN '.TBL_USER_INTERESTS.' intr ON intr.interest_id=u.interest_id '; if(is_numeric($uid_username) && $uid_username > 0) { $sql.=' WHERE u.user_id = ? AND u.status="active" LIMIT 1 '; } else { $sql.=' WHERE u.username = ? AND u.status="active" LIMIT 1 '; } $query = $this->db->query($sql,array($uid_username)); return ($query->num_rows() > 0) ? $query->row() : FALSE ; }
Primesc eroare la linia 115, adica:

Cod: Selectaţi tot

return ($query->num_rows() > 0) ? $query->row() : FALSE ;
Tabela este incarcata, contine acele coloane ... nu am idee de ce afiseaza eroarea.

cata1241
Ei bine, eroarea spune totul.Cu alte cuvinte variabila $query tine o valoare booleana, desi acolo apelezi o metoda, ceea ce inseamna pe randul

Cod: Selectaţi tot

$query = $this->db->query($sql,array($uid_username));
se afla cu adevarat eroarea.Posibil ca interogarea SQL sa nu fie corecta.Folosesti PDO pentru interactionarea cu baza de date? Daca folosesti PDO, poti alege ca atunci cand ceva nu merge bine, PDO sa emita exceptii.

Cod: Selectaţi tot

try { $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); exit; }
Te poti inspira de aici.

MarPlo
S-ar putea sa fie ceva gresit in codul $sql si mysql returneaza eroare, din cauza asta variabila $query primeste valoarea False.
In astfel de cazuri eu aplic un:

Cod: Selectaţi tot

echo $sql;
- ca sa vad sirul SQL rezultat, copii sirul, inlocuiesc in sir inlocuitorii cu valoarea lor (in codul tau '?' cu $uid_username), apoi testez sirul in PhpMyAdmin.

Ca sa eviti afisarea erorii la acea linie, poti face asa:

Cod: Selectaţi tot

return ($query !==false && $query->num_rows() > 0) ? $query->row() : FALSE;

cadou
Cata, din ce am gasit, se pare ca se face conectarea la baza de date cu mysql

Cod: Selectaţi tot

function db_connect() { if ($this->port != '') { $this->hostname .= ':'.$this->port; } return @mysql_connect($this->hostname, $this->username, $this->password, TRUE); }
Si am incercat sa fac conectarea la baza de date cu PDO, inlocuind acolo la return .... cu

Cod: Selectaţi tot

return new PDO($this->hostname, $this->username, $this->password);
Dar nu am reusit, ceva nu am scris bine ...

MarPlo
Conectarea la mysql cu pdo se face cu urmatoareea sintaxa:

Cod: Selectaţi tot

$conn = new PDO("mysql:host=$host; dbname=$name_db", $user, $pass);
vezi lectiile despre pdo din cursul php de pe site.

- Schimbarea scriptului de la mysql la pdo (sau mysqli) necesita modificari in tot codul unde se folosesc functii "mysql_".

Subiecte similare