Mysqli začiatok

Programovacie jazyky, rady, poradňa...
mnichovcan
Medium Expert
Medium Expert
Príspevky: 97
Registrovaný: 17 mar 2011, 23:03

Mysqli začiatok

Príspevok od používateľa mnichovcan »

Dlho som sa php nevenoval a teraz by som sa chcel naučiť mysqli ale hned v úvode som narazil na problém

Kód: Vybrať všetko

$mysqli = new mysqli ("localhost","root","","test1");

if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}



$id=7;

$vys =  vyber($id);

echo $vys;


$mysqli->close();



function vyber($user){

global $mysqli;

$a = $user;

if(!($stmt=$mysqli->prepare("SELECT p FROM user WHERE id=? "))){
 echo "Chyba!";
}


$stmt->bind_param("i",$a);

$stmt->execute();

$hrac = $stmt->bind_result($p);



return $hrac;

}


Stále to vypisuje len " 1 " . Aj ked v DB má uzivatel z id 7 v " p " iné cislo ako mám to číslo pomocu tej funkcie vratit ? Skušal som tam ešte pridat aj takto

Kód: Vybrať všetko

 $stmt->bind_result($p); 
    $hrac= $stmt -> $fetch();] 
Ale potom dostavam toto Call to a member function bind_param() on a non-object in
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Mysqli začiatok

Príspevok od používateľa BX »

Pozri sa, čo je to bind_result. Samotná táto funkcia totiž vracia len TRUE/FALSE, to je tá tvoja jednička
http://php.net/manual/en/mysqli-stmt.bind-result.php
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Mysqli začiatok

Príspevok od používateľa audiotrack »

výsledok bude v $p a nie v $hrac (samozrejme tie dva riadky čo si dopísal tam majú byť)

tú chybu čo ti hádže, hádže preto, že v riadku

Kód: Vybrať všetko

$hrac= $stmt->$fetch();
nemá byť pred fetch() znak doláru. Takže to bude

Kód: Vybrať všetko

function vyber($user){

     global $mysqli;

     if(!($stmt=$mysqli->prepare("SELECT p FROM user WHERE id=? "))){
          echo "Chyba!";
     }

     $stmt->bind_param("i",$user);
     $stmt->execute();
     $stmt->bind_result($p);
     $stmt->fetch();
     
     return $p;
}
mnichovcan
Medium Expert
Medium Expert
Príspevky: 97
Registrovaný: 17 mar 2011, 23:03

Re: Mysqli začiatok

Príspevok od používateľa mnichovcan »

Dakujem za radu. A chcel by som sa opýtať ešte či použitím prepare statement zabraňujem sql injection ? A aký je rozidel medzi get_result() a bind_result()?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Mysqli začiatok

Príspevok od používateľa audiotrack »

áno, ale na úkor rýchlosti
Napísať odpoveď