Kezdőoldal » Számítástechnika » Weblapkészítés » Miért kapok mindig 1-et a...

Miért kapok mindig 1-et a num_rows-ra?

Figyelt kérdés

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;

}

}



2015. okt. 28. 18:16
1 2
 11/12 A kérdező kommentje:

Az egyszerűség kedvéért van a database osztály, így nem kell megírni minden egyes prepared statementhez mondjuk az execute-t stb., elég ha példányosítom mondjuk a selectet. Itt meg csak 3 paramétert adok át neki.


1.Az egyik az SQL (pl.:)

SELECT * FROM tabla WHERE username = ? && jelszo = ?


2.Ezután átadom neki a ? helyére kívántat, jelenesetben:

$this->username, $this->password


3.És mivel szükség a bind_paramnál a betűkre (s, ha string, d ha decimal number), ráadásul annyira, amennyi kérdőjel van (bocs, máshogy nem tudtam megfogalmazni :D), ezért 3. paraméterként átadod neki ezeket a betűket. Jelenesetben most nem számok és kettő darab kérdőjel van, ezért ezeket adod át:

%s,%s


Majd látod is a database osztályban a select metódusnál, hogy a ezeket még implode-olja, és szépen lassan előállítja az sql lekérdezést. Így ha le akarok kérdezni valamit, csak ennyit teszek:

$database = new database();

$sql = $database->select(

"SELECT * FROM tabla WHERE username = ? && jelszo = ?",

array($this->username,$this->password),

"%s,%s");

2015. okt. 28. 19:02
 12/12 anonim ***** válasza:

én még a select rész leegyszerűsíteném annyival, hogy a beviteli mezőket felismertetném.

hogy szöveg, szám ... és az alapján automatikusan össze is állítanám...

Vagy ha lusta vagy, mindet kezelheted string -ként is. :-)

2015. okt. 28. 19:12
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!