Oprettet fre. d. 19. oktober 2012 kl. 09:24:15

gigi1
gigi1 (865 point. Point ude: 325)

Æ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);

Skrevet fre. d. 19. oktober 2012 kl. 09:42:10| #1


Skrevet fre. d. 19. oktober 2012 kl. 10:53:06| #2

gigi1
gigi1 (865 point)
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?

Skrevet fre. d. 19. oktober 2012 kl. 11:15:12| #3

Det kommer jo an på om du skal have mere end én række ud, hvilket du formodentlig ikke skal.

Skrevet fre. d. 19. oktober 2012 kl. 11:16:00| #4


Skrevet fre. d. 19. oktober 2012 kl. 11:22:25| #5

arne_v
arne_v (1.048.768 point)
Hvorfor skifte fra PDO til mysqli?

Skrevet fre. d. 19. oktober 2012 kl. 11:26:08| #6

gigi1
gigi1 (865 point)
Fordi at jeg på resten af siden benytter mig af mysqli.
Hvorfor så bruge noget andet til en anden funktion?

Skrevet fre. d. 19. oktober 2012 kl. 12:33:35| #7

gigi1
gigi1 (865 point)
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)."]";
}

}

Skrevet fre. d. 19. oktober 2012 kl. 13:06:57| #8

olebole
olebole (216.733 point)
<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>

Skrevet fre. d. 19. oktober 2012 kl. 15:21:55| #9

gigi1
gigi1 (865 point)
Nu har jeg noget at gå efter.

Tak for hjælpen.

Skrevet fre. d. 19. oktober 2012 kl. 15:47:28| #10

olebole
olebole (216.733 point)
Selvtak. Prøv det og kom tilbage med en melding  =)

Skrevet lør. d. 20. oktober 2012 kl. 19:58:46| #11

arne_v
arne_v (1.048.768 point)
generelt boer der nok vaere en if paa prepare kaldet

Skrevet lør. d. 20. oktober 2012 kl. 21:23:59| #12

olebole
olebole (216.733 point)
#11: ja, enten en IF på selve kaldet, eller efterfølgende på det returnerede - alternativt på $mysqli->errno

Skrevet tor. d. 06. december 2012 kl. 16:25:30| #13

gigi1
gigi1 (865 point)
Smid lige svar Ole :-)

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   


Seneste spørgsmål

Problemer med random select og cache

Oprettet den 21. maj 2013 kl. 20.43
webweaver giver 100 point for svar | Giv et svar »

DB-baseret dropdown viser selected post to gange...

Oprettet den 21. maj 2013 kl. 15.52
allandk giver 30 point for svar | Giv et svar »

Hente alle poster og gemme i variabel til senere echo

Oprettet den 20. maj 2013 kl. 21.49
allandk giver 30 point for svar | Giv et svar »

Seneste guides

Slettet
Håndtering af tekstoversættelse i...
Parameteriseret tekstformatering i C#
C++ Historie og Programmering - Del 1







Tips & Tricks fra PC World

Teaser billede

Her er seks Google Labs-funktioner, som du skal slå til med det samme

Gmail Labs giver dig adgang til en masse smarte funktioner, som Googles ingeniører leger med i øjeblikket.


Anmeldelser fra PC World

Teaser billede

Test: Samsung Galaxy S4 er et hit - trods gøglertricks

Kan Samsung beholde førertrøjen i det store Android-race? Galaxy S4 er smækfyldt med innovative funktioner, men også med en del gøgl. Er det for meget? Få vores dom over Samsungs nye topmodel.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Tre smarte trick som gør Windows 8 bedre

Boot direkte til skrivebordet, få en strategisk godt placeret luk-knap og slip for at logge ind. Her er tre tips til Windows 8, som gør det nemmere at blive venner med styresystemet.


Nyheder fra Computerworld

Teaser billede

Internet of Things: Derfor vil alt ændre sig nu

Efter at have talt om Internet of Things i årevis, er det nu tid til at udnytte den verden af muligheder, der opstår, når milliarder af enheder kobles trådløst til internettet.


IT Kurser
Samarbejdspartnere

Udgiver · © 2013 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger