Miért kapok mindig 1-et a num_rows-ra?
Bejelentkezést csinálom most éppen, és a num_rowsra mindig 1-et kapok.
Login:
$login = new Login($username, $password);
class Login {
protected $username;
protected $password;
protected $connection; //Database object
public function __construct($username,$password){
//set data
$this->setData($username,$password);
//connect to db
$this->connectToDB();
//get data
$this->getData();
}
protected function setData($username,$password){
$this->username = $username;
$this->password = $password;
}
protected function connectToDB(){
$this->connection = new Database();
}
protected function getData(){
$select = $this->connection->select('SELECT * FROM users WHERE felhasznalonev = ? && jelszo = ?', array($this->username,$this->password), array('%d','%d'));
if($select != 0){
return TRUE;
}else {
return FALSE;
}
}
}
A lényeg az adatbázis osztályból: (select)
class Database extends config {
public function select($query, $data, $format)
{
// Connect to the database
$db = $this->connect();
//Prepare our query for binding
$stmt = $db->prepare($query);
//Normalize format
$format = implode('', $format);
$format = str_replace('%', '', $format);
// Prepend $format onto $values
array_unshift($data, $format);
//Dynamically bind values
call_user_func_array(array($stmt, 'bind_param'), $this->ref_values($data));
//Execute the query
$stmt->execute();
//Fetch results
$stmt->get_result();
$result = $stmt->num_rows;
return $result;
}
private function ref_values($array)
{
$refs = array();
foreach ($array as $key => $value) {
$refs[$key] = &$array[$key];
}
return $refs;
}
}
Ha viszont nem PDO kéne tudni milyen rendszer...
Mert így pár száz hasonlóból barkochbáztunk.
Meg van a ludas:
$select = $this->connection->select('SELECT * FROM users WHERE felhasznalonev = ? && jelszo = ?', array($this->username,$this->password), array('%d','%d'));
HELYETT:
$select = $this->connection->select('SELECT * FROM users WHERE felhasznalonev = ? && jelszo = ?', array($this->username,$this->password), array('%ss'));
select -ben a 3 elemnek nem sok értelme marad.
elöször egyesíted az elemeket tehát lesz egy '%d%d' string, majd kiveszed belőle a % -jelet és lesz 'dd' string, majd beadod a $data -nak 3. elemnek.
Mindegy, ha jól értem, amúgy is elvész, mivel 2 elem van amit bind -el behelyettesítel.
majd a funkcióban vissza adod return -ba és végre hajtod.
A get_result() -nak ekkor / itt nem sok értelme van szerintem lehet ez a hiba forrása.
De javaslom, írasd ki mi jött vissza.
:D prepared statementnél a bind_param-nál át kell adni a paraméterek számával megegyező karaktereket, ha betű akkor s, ha szám akkor d, ha jól tudom.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!