Avatar billede NielsErikP Mester
13. februar 2013 - 00:44 Der er 24 kommentarer og
1 løsning

"bind_result".. resultatet ind i et array for udskrivning.

Hej...

Jeg vil gerne kunne ligge bind_result resultatet ind i mit array for at kunne udskrive det..
Nogen der kan se, hvad det er jeg ikke gør rigtigt i følgende kode :


    // Opret en "PREPARED STATEMENT" ...
   
    if($stmt = $db->prepare("SELECT kunstner_navn, album_navn, udgivelse_aar, tracks, produced_by, mixed_by, company FROM cd_holder WHERE id='1'") ) {
   
        $stmt->execute();
       
        $stmt->bind_result($kunstner_navn, $album_navn, $udgivelse_aar, $tracks, $produced_by, $mixed_by, $company);
       
        $data = array($kunstner_navn, $album_navn, $udgivelse_aar, $tracks, $produced_by, $mixed_by, $company);
       
        for ($tael1 = 0; $tael1 <= 6; $tael1++) {
            echo $data[$tael1] . "<br>";
        }
        $stmt->close();
       
    }
    else {
        echo "Prepared statement fejl.." . $db->error;
    }
       

Avatar billede olebole Juniormester
13. februar 2013 - 01:49 #1
<ole>

Hvad sker der? Hvad PHP's fejlmeldinger sat til?

/mvh
</bole>
Avatar billede NielsErikP Mester
13. februar 2013 - 07:37 #2
Hej...

Jeg får bare en "Hvid side" ingen fejlmeldinger... Det ser ud som om den godt nok kører igennem, men blot ikke udskriver array'et som jeg beder den om i min for- løkke.

Mht. PHP's fejl meldinger, har jeg intet rørt. Den står som den gør fra installationen af Xammp. Er der noget jeg skal gøre, mener noget jeg derudover skal slå til?
Avatar billede arne_v Ekspert
13. februar 2013 - 08:41 #3
fetch'er du noget??
Avatar billede arne_v Ekspert
13. februar 2013 - 08:43 #4
$stmt->execute();  // udfoer query
     
        $stmt->bind_result($kunstner_navn, $album_navn, $udgivelse_aar, $tracks, $produced_by, $mixed_by, $company); // fortael at fetch skal gemme i disse variable

        // ingen fetch !
     
        $data = array($kunstner_navn, $album_navn, $udgivelse_aar, $tracks, $produced_by, $mixed_by, $company); // lav array af de variable som der ikke er fetchet ind i
Avatar billede NielsErikP Mester
13. februar 2013 - 10:34 #5
Hej..

jamen så er der squ noget jeg hat misforstået, er ikke ikke kommet rundt om/forbi fetch .. Endnu. Så jeg ved faktisk ikke rigtigt, hvordan dette bruges/gøres.

Jeg havde fornemmelsen af bind_result var en måde at give det "Skvulpende" resultat inde i funktionen, en måde at komme ud på, og da jeg gør det med :


$stmt->bind_result($kunstner_navn, $album_navn, $udgivelse_aar, $tracks, $produced_by, $mixed_by, $company);



Havde jeg en ide om at $kunstner_navn .. osv havde fået påbundet sig et resultat med bind_result .'
Men der er åbenbart noget jeg ikke har forstået.
Avatar billede olebole Juniormester
13. februar 2013 - 14:30 #6
Prøv at kikke på denne guide. Den går ikke i dybden, men man kan forhåbentlig få en idé om, hvad MySQLI og prepared statements er - samt hvordan man kommer igang med det  =)
Avatar billede olebole Juniormester
13. februar 2013 - 14:46 #7
Dit prepared statement 'bygger' en funktion på databasen. Normalt ville du kalde en PHP-funktion på denne måde:

my_function('ole', 'bole');

- men en databasefunktion, skabt med et prepared statement, kaldes i to hug: Det første sender argumenterne 'ole' og 'bole' - mens det andet hug eksekverer funktionen:

$stmt->bind_param('ss', 'ole', 'bole');
$stmt->execute();

Nu er funktionen kaldt, men vi skal have resultatet ud af funktionen. Man kunne måske forestille sig, at execute ville returnere resultatet, men det er ikke tilfældet.

Du skal først levere nogle 'fartøjer' (variabler), som resultatet kan lægge sig i, når det skal transporteres ud af funktionen. Det gøres med bind_result.

Ligesom i MySQL er det ikke nok at kalde funktionen. Resultatet af det er en såkaldt ressource, som kun giver mening for databasen. De enkelte rækker skal trækkes ud med en af fetch metoderne.

Når du har kaldt en fetch, vil en rækkes værdier lægge sig i de variabler, du bandt til funktionen med bind_result - hvorfra de kan bruges/kopieres.

Næste gang, du kalder fetch, vil en ny rækkes værdier lægge sig i de samme variabler, osv.

Håber, det hjalp lidt  =)
Avatar billede NielsErikP Mester
13. februar 2013 - 23:09 #8
Hej...

Tak for forklaringen endnu engang, Ole.. mht. til ar variabler skal bindes til reaultatet med bind_result ..

Men det mener jeg jo også jeg gør her :



  $stmt->bind_result($kunstner_navn, $album_navn, $udgivelse_aar, $tracks, $produced_by, $mixed_by, $company);



Jeg har nu prøvet følgende :


<?php


    $db = new mysqli("localhost", "root", "", "musik_kartotek");
   
    // Tjek forbindelse til Databasen...
    if(mysqli_connect_errno() ) {
        echo "Forbindelsen er ikke etableret.." . mysqli_connect_error();
        exit;
    }
   
    // Opret en "PREPARED STATEMENT" ...
   
    if($stmt = $db->prepare("SELECT kunstner_navn, album_navn, udgivelse_aar, tracks, produced_by, mixed_by, company FROM cd_holder WHERE id='1'") ) {
   
        $stmt->execute();
       
        $stmt->bind_result($kunstner_navn, $album_navn, $udgivelse_aar, $tracks, $produced_by, $mixed_by, $company);
       
        $stmt->fetch();
       
        $data = array($kunstner_navn, $album_navn, $udgivelse_aar, $tracks, $produced_by, $mixed_by, $company);
       
        for ($tael1 = 0; $tael1 <= 6; $tael1++) {
            echo $data[$tael1] . "<br>";
        }
        $stmt->close();
       
    }
    else {
        echo "Prepared statement fejl.." . $db->error;
    }
       
   
?>   



Men den giver stadig ingen udskrivning eller Fejl meddelser.
Avatar billede olebole Juniormester
13. februar 2013 - 23:20 #9
Prøv:

$stmt->execute();
echo $stmt->error;

Skriver den ikke noget ud, flytter du den til efter fetch, osv
Avatar billede olebole Juniormester
13. februar 2013 - 23:21 #10
Først efter $stmt->bind_result - så efter $stmt->fetch, osv  *o)
Avatar billede NielsErikP Mester
13. februar 2013 - 23:47 #11
Hej...

#9: Er nu prøvet efter $stmt->bind , $stmt->fetch og efter for- løkken..

Stadig blot en kridhvid side uden resultat udskrivning... hmm
Avatar billede NielsErikP Mester
13. februar 2013 - 23:56 #12
Hej igen..

Lad være med at bruge mere tid på mig, ole..
Egen fejl.. fejlen lå i WHERE id='1' skulle være WHERE id='0' ... Forsår ikke den har sat den ind som id='0' , da jeg under CREATE TABLE satte den til id INT NOT NULL,...  

Sorry jeg brugte din tid, ole :-)

Hvis du ikke vil have noget for det, vil jeg bede arne lægge et svar da han kom ind på fetch i #3 & 4.
Avatar billede olebole Juniormester
14. februar 2013 - 00:04 #13
Hehe ... no problem  *o)
Avatar billede olebole Juniormester
14. februar 2013 - 00:14 #14
Glemte at skrive: 0 er ikke NULL ... 0 er noget  =)
Avatar billede NielsErikP Mester
14. februar 2013 - 01:36 #15
Hej...

Okay... UUUHa.. 0 på min konto er ikke noget "Smiler".. Den vil jeg lige tænke over, men tak ole.
Avatar billede olebole Juniormester
14. februar 2013 - 15:46 #16
0 på min konto = hovedpine. 0 er skam noget  *o)

Jeg husker en matematiklærer, som for mange år siden påstod, at Isaac Newton brugte flere hundrede sider på at diskutere '0' i  hovedværket 'Principia Mathematica'
Avatar billede arne_v Ekspert
14. februar 2013 - 19:26 #17
Det er helt basalt at NULL og 0 er forskellige for tal (og NULL og '' er forskellige for strenge).

NULL betyder "ikke udfyldt" / "not applicable" / "ingen vaerdi" mens 0 (og '') er udfyldte gyldige vaerdier.

Eksempel:

Vi spoerger Asger, Benny, Carlo, Dennis og Ejgild hvor mange aabne spoergsmaal de har paa eksperten.dk.

Benny og Dennis svarer ikke. Asger svarer 1, Carlo svarer 3 og Ejgild svarer 2.

mysql> CREATE TABLE survey (
    ->    id INTEGER NOT NULL,
    ->    name VARCHAR(50),
    ->    openquestions INTEGER,
    ->    PRIMARY KEY(id)
    -> );
Query OK, 0 rows affected (0.11 sec)

mysql>
mysql> INSERT INTO survey VALUES(1, 'Asger', 1);
Query OK, 1 row affected (0.05 sec)

mysql> INSERT INTO survey VALUES(2, 'Benny', NULL);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO survey VALUES(3, 'Carlo', 3);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO survey VALUES(4, 'Dennis', NULL);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO survey VALUES(5, 'Ejgild', 2);
Query OK, 1 row affected (0.00 sec)

mysql>
mysql> SELECT COUNT(*) FROM survey;
+----------+
| COUNT(*) |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT COUNT(openquestions) FROM survey;
+----------------------+
| COUNT(openquestions) |
+----------------------+
|                    3 |
+----------------------+
1 row in set (0.00 sec)

mysql> SELECT AVG(openquestions) FROM survey;
+--------------------+
| AVG(openquestions) |
+--------------------+
|            2.0000 |
+--------------------+
1 row in set (0.01 sec)

mysql>
Avatar billede arne_v Ekspert
14. februar 2013 - 20:44 #18
Med hensyn til fetch saa:

prepare => du laver en huske seddel til koebmanden

execute => sende en hen og henter varerne hos koebmanden

bind_result => laver plads i koeleskabet til de forskellige ting

fetch => saetter tingene i koeleskabet
Avatar billede arne_v Ekspert
14. februar 2013 - 20:44 #19
og et svar
Avatar billede arne_v Ekspert
14. februar 2013 - 20:50 #20
i.s.f. bind_result og fetch, saa kan man ved mindre datamaengder bruge get_result og fetch_all
Avatar billede olebole Juniormester
14. februar 2013 - 20:56 #21
#18: Clevin, go home!  *D

Måske, du lige mangler én:

prepare => du laver en huske seddel til koebmanden

bind_param => din kone oversætter dine værste kragetæer til noget læseligt

... ... ...
Avatar billede arne_v Ekspert
14. februar 2013 - 21:18 #22
hvis der er brug for parametre, saa skal der bruges bind_param
Avatar billede NielsErikP Mester
14. februar 2013 - 22:28 #23
Hej...

Tusind tak, i to ørne.. Så fik jeg da lige lært at handle ind "Smiler".
Avatar billede olebole Juniormester
14. februar 2013 - 22:46 #24
Det er ofte en rigtig god idé med en analogi helt ude af vanlig kontekst. I heldige tilfælde kan det 'springe over autoblokeringer' og få mange til at kikke uden om  'indviklet' sprog. Håbet er et resultat i stil med: "nåhhh ... ikke andet?"  *o)
Avatar billede NielsErikP Mester
14. februar 2013 - 23:19 #25
Hej..

Tit.. er det hjælpsomt med billede sprog/Metaforer. Og rart med nogen der er "Klogere.." end en selv.
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