nwinger Skrevet 5. april 2011 Del Skrevet 5. april 2011 Hei, har et spørsmål i forbindelse med enkel tilkobling og henting av rader i en database. Jeg lurer på hvorfor jeg får følgende feilmelding: Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /Users/nicklas/Sites/test/index.php on line 7 Dette skjer kun når jeg kobler til databasen ved hjelp av en egen funksjon (db_connect()). <?php $dbhost = "localhost"; $dbuser = "root"; $dbpass = ""; $db = "test_db"; function connect_db() { mysql_connect($dbhost, $dbuser, $dbpass); mysql_select_db($db); } ?> Feilmeldingen kommer når denne siden kjøres <?php include 'db.php'; connect_db(); $result = mysql_query("SELECT * FROM test"); while($row = mysql_fetch_array($result)) { echo $row[0] . "<br/>"; } ?> Hvorfor får jeg da ikke feilmeldingen når jeg kjører scriptet, men uten funksjonen db_connect() ? <?php include 'db.php'; // connect_db(); $result = mysql_query("SELECT * FROM test"); while($row = mysql_fetch_array($result)) { echo $row[0] . "<br/>"; } ?> <?php $dbhost = "localhost"; $dbuser = "root"; $dbpass = ""; $db = "test_db"; mysql_connect($dbhost, $dbuser, $dbpass); mysql_select_db($db); ?> Er det rett og slett fordi db_connect skal returnere noe? Lenke til kommentar
eigan Skrevet 5. april 2011 Del Skrevet 5. april 2011 mysql_query returnerer visstnok en boolsk verdi, det gjør den ved INSERT, UPDATE, etc, og når det er en feilmelding. Legg inn under $result = ....; if(!$result) die(mysql_error()); Lenke til kommentar
AlecTBM Skrevet 6. april 2011 Del Skrevet 6. april 2011 Funksjonen connect_db() har ikke tilgang til variablene (host og pass osv) du har gitt fordi de ikke er globale. Du kan bruke global: feks <?php $var = 'foo'; function bar1() { global $var; return $var; } var_dump(bar1()); //Vil returnere "foo" function bar2() { return $var; } var_dump(bar2()); //Vil returnere NULL fordi $var ikke er satt Lenke til kommentar
Crowly Skrevet 7. april 2011 Del Skrevet 7. april 2011 (endret) mysql_query krever en link identifier: The MySQL connection. If the link identifier is not specified, the last link opened by mysql_connect() is assumed. If no such link is found, it will try to create one as if mysql_connect() was called with no arguments. If no connection is found or established, an E_WARNING level error is generated. Tror du må returnere denne (link id'en) fra funksjonen og lagre den i en variabel. Det er i alle fall slik de eksemplene jeg har sett gjør det, og slik jeg alltid har gjort det. Mulig det ikke er nødvendig, men det er i alle fall ikke feil å gjøre det slik Under er ett eksempel på en tilkoblings funksjon jeg fant en gang, og bruker i dag, bør nok håndtere mislykkede tilkoblinger litt mer elegant enn med exit() ... : <?php function connect() { $host="127.0.0.1"; $user="bruker"; $pwd="passord"; $db="database"; if (!($link=@mysql_connect($host,$user,$pwd))) { echo "<p>Klarte ikke koble til database serveren.</p>"; exit(); } if (!@mysql_select_db($db,$link)) { echo "<p>Finner ikke databasen.</p>"; exit(); } return $link; } $link=connect(); $sql="SELECT * FROM tabell"; $rs=mysql_query($sql); // skal jeg pirke skal det være $rs=mysql_query($sql,$link); while (mysql_fetch_assoc($rs)) { ... } mysql_close($link); ?> Endret 7. april 2011 av Crowly Lenke til kommentar
nwinger Skrevet 8. april 2011 Forfatter Del Skrevet 8. april 2011 Takker for et meget bra og utfyllende svar! Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå