Avatar billede gigi1 Nybegynder
19. oktober 2012 - 09:24 Der er 13 kommentarer

Ændring fra PDO til MySQLi

Hej

Hvordan konvertere jeg følgende kode til mysqli


$rows = array(); 

if(isset($_GET['fruitName'])) { 

$stmt = $pdo->prepare("SELECT variety FROM fruit WHERE name = ? ORDER BY variety"); 

$stmt->execute(array($_GET['fruitName'])); 
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 

echo json_encode($rows);
Avatar billede michael_stim Ekspert
19. oktober 2012 - 09:42 #1
Avatar billede gigi1 Nybegynder
19. oktober 2012 - 10:53 #2
Jeg har godt set guiden men er lidt i tvivl.

Skal jeg lave en løkke som vist i guiden?

while ($stmt->fetch()) {     
echo $fornavn . ' ' . $efternavn . '<br>';   
}


Skal jeg bruge fetchAll() eller som i guiden fetch()?
Skal jeg lave et array i Execute?
Avatar billede michael_stim Ekspert
19. oktober 2012 - 11:15 #3
Det kommer jo an på om du skal have mere end én række ud, hvilket du formodentlig ikke skal.
Avatar billede gigi1 Nybegynder
19. oktober 2012 - 11:16 #4
Det skal jeg.
Avatar billede arne_v Ekspert
19. oktober 2012 - 11:22 #5
Hvorfor skifte fra PDO til mysqli?
Avatar billede gigi1 Nybegynder
19. oktober 2012 - 11:26 #6
Fordi at jeg på resten af siden benytter mig af mysqli.
Hvorfor så bruge noget andet til en anden funktion?
Avatar billede gigi1 Nybegynder
19. oktober 2012 - 12:33 #7
Nu har jeg lavet denne men jeg får følgende fejl:
Call to undefined method mysqli_stmt::get_result()


if(isset($_GET['fruitName'])) { 

$stmt = $mysqli->prepare("SELECT variety FROM fruit WHERE name = ? ORDER BY variety"); 

$stmt->bind_param("s", $_GET['fruitName']);

$stmt->execute();
$result = $stmt->get_result();
$stmt->close();
$mysqli->close();

if (mysqli_num_rows($result) == 0) {
    echo '{"results":0}';
} else {
    $json = "[";
    while ($res = $result->fetch_object()) {
        $json .= json_encode($res).",";
    }
    echo substr($json, 0, -1)."]";
}

}
Avatar billede olebole Juniormester
19. oktober 2012 - 13:06 #8
<ole>

Står valget mellem MySQLI og PDO, ville jeg klart vælge PDO. PDO har - ud over at gøre koden bredt portabel mellem forskellige databaser - nogle væsentlige fordele. Bl.a. er det lettere at binde argumenter, da PDO ikke kræver dem som referencer.

Anyway, hvis du insisterer, så siger fejlen, at du kalder en udefineret metode (get_result) på statement objektet. Da et statement objekt jo altid har den metode, må fejlen altså skyldes, at du ikke har noget statement.

Prøv at indsætte linjen:

echo $mysqli->error;

- lige efter din 'prepare-linje'. Skriver den ikke noget ud, må du flytte den nedad - én linje ad gangen. Så finder du formodentlig forklaringen på fejlen  =)

Derudover ville jeg danne JSON-strngen på denne måde:

$rows = array();
if (mysqli_num_rows($result) > 0) {
    while ($res = $result->fetch_object()) {
        $rows[] = $res;
    }
}
$json = json_encode($rows);

/mvh
</bole>
Avatar billede gigi1 Nybegynder
19. oktober 2012 - 15:21 #9
Nu har jeg noget at gå efter.

Tak for hjælpen.
Avatar billede olebole Juniormester
19. oktober 2012 - 15:47 #10
Selvtak. Prøv det og kom tilbage med en melding  =)
Avatar billede arne_v Ekspert
20. oktober 2012 - 19:58 #11
generelt boer der nok vaere en if paa prepare kaldet
Avatar billede olebole Juniormester
20. oktober 2012 - 21:23 #12
#11: ja, enten en IF på selve kaldet, eller efterfølgende på det returnerede - alternativt på $mysqli->errno
Avatar billede gigi1 Nybegynder
06. december 2012 - 16:25 #13
Smid lige svar Ole :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester