Avatar billede Calle5463 Forsker
12. september 2013 - 10:31 Der er 6 kommentarer og
1 løsning

Prepared statements (PS) - EasyPHP - newbee

Det er føste gang jeg forsøger med PS, at få forbindelse til en lille tabel kaldet medlemsdata som ligger i databaseb kaldet dwk.

Jeg har sfl startet med at copy-paste fra guiden og tilrettet som jeg mener det skal:

<?php
$sql_server = "localhost";    // vært
$sql_brugernavn = "root";    // bruger
$sql_kodeord = "";            // password
$sql_dbnavn ="dwk";            // databasens navn

// $mysqli = new mysqli("server", "brugernavn", "kodeord", "dbnavn");
$mysqli = new mysqli($sql_server, $sql_brugernavn, $sql_kodeord, $sql_dbnavn);

/* Tjekker om der opstod en fejl */
if (mysqli_connect_errno()) {
    echo 'Der opstod en fejl ved forbindelsen: ' . mysqli_connect_error();
    exit();
    } else {
    echo 'Det ser s.. ud til der er forbindelse til serveren "' . $sql_server . '" og DBen "' . $sql_dbnavn . '".<br>';
}

/* Opret et prepared statement */
if ($stmt = $mysqli->prepare('SELECT fornavn, efternavn FROM medlemsdata WHERE identnr > ?')) {

    /* Bind parametre */
    $stmt->bind_param('i', $id);

    /* Sæt værdier på parametrene */
    $id = $_GET['identnr'];

    /* Eksekver forespørgslen */
    $stmt->execute();

    /* Bind resultatet */
    $stmt->bind_result($fornavn, $efternavn);

    /* Hent rækker og udskriv data */
    while ($stmt->fetch()) {
        echo $fornavn . ' ' . $efternavn . '<br>';
    }

    /* Luk statement */
    $stmt->close();

    } else {
    /* Der er opstået en fejl */
    echo 'Der opstod en fejl i erklæringen: ' . $mysqli->error;
}
?>


- med dette til resultat:


Det ser s.. ud til der er forbindelse til serveren "localhost" og DBen "dwk".

Notice: Undefined index: identnr in C:\Users\...............\test.php on line 25


Linie 25 er denne:    $id = $_GET['identnr'];

Hvad har jeg ikke forstået?

(Hvad skriver jeg i øvrigt for at se hvilken database og tabel jeg faktisk har forbindelse til, og ikke bare dem jeg beder om?)
Avatar billede repox Seniormester
12. september 2013 - 11:28 #1
Lad være med at finde på et akronym selv for prepared statements. Det letter ikke forståelsen for nogen.

$_GET['identnr'] er ikke sat og derfor får du beskeden om et udefineret indeks. For at sætte indekset 'identnr' i superglobal arrayet $_GET skal du skrive den som parameter i din URL:
test.php?identnr=15

Jeg tror ikke jeg forstår dit andet spørgsmål. Hvis du ikke ved hvilken database du har forbindelse til,  hvordan har du så lavet forbindelsen?
Avatar billede Calle5463 Forsker
12. september 2013 - 11:47 #2
#1

Jeg tror ikke jeg forstår dit andet spørgsmål. Hvis du ikke ved hvilken database du har forbindelse til,  hvordan har du så lavet forbindelsen?


- når man ikke får resultater man forstår, så er det de særeste ting man kan blive i tvivl om, og når man læser diverse artikler, som tilsyneladende roder rundt i 'tabeller' om databaser og 'database' om tabel, så bliver man (jeg) forvirret. Desuden ville jeg gerne rent faktisk se at det også ER den database jeg har forbindelse til, og ikke bare et blankt svar fordi det tilsyneladende gik godt. Ingen besked er for mig ikke det samme som 'det gik godt'.

Bare derfor :-)

I øvrigt virker test.php?identnr=1 (det min hustru :-) )

Smid et svar #1
Avatar billede repox Seniormester
12. september 2013 - 12:16 #3
Eksempler og tutorials er selvfølgelig udsat for både forfatters og læsers fortolkning og forståelse. Som udgangspunkt vil jeg mene at du ikke er i tvivl om hvilken database du er forbundet til i og med det er dig der angiver forbindelsesoplysningerne inden forbindelsen oprettes.
Avatar billede Calle5463 Forsker
12. september 2013 - 12:28 #4
.. i og med det er dig der angiver forbindelsesoplysningerne inden forbindelsen oprettes.

Måske netop derfor - jeg mener at kende mig selv

Jeg bryder mig ikke om de der "intet nyt er godt" - jeg vil have vished :-)
Avatar billede repox Seniormester
12. september 2013 - 12:35 #5
Vished skal du få - alle oplysningerne kan hentes direkte ud af MySQL:http://dev.mysql.com/doc/refman/5.0/en/information-functions.html
Avatar billede arne_v Ekspert
12. september 2013 - 20:39 #6
mysqli har faktisk metoder til at hente en masse information ud om en connection:

function con_dump($con) {
    $stats = $con->get_connection_stats();
    echo 'Host: ' . $con->host_info . "\r\n";
    echo 'Server version: ' . $con->server_info . "\r\n";
    echo 'Server status: ' . $con->stat() . "\r\n";
    echo 'Client version: ' . $con->client_info . "\r\n";
    echo 'Character set: ' . $con->character_set_name() . "\r\n";
    echo 'Affected rows for last SQL: ' . $con->affected_rows . "\r\n";
    echo 'Returned fields for last SQL: ' . $con->field_count . "\r\n";
    echo 'Last auto increment id: ' . $con->insert_id . "\r\n";
    echo 'Bytes sent: ' . $stats['bytes_sent'] . "\r\n";
    echo 'Bytes received: ' . $stats['bytes_received'] . "\r\n";
}
Avatar billede Calle5463 Forsker
12. september 2013 - 20:55 #7
Takker arne_v, copy/pastet for senere at kigge nærmere på det.
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