Gå til innhold

Slite med å forstå enkel feilmelding


Anbefalte innlegg

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
Videoannonse
Annonse

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

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 av Crowly
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...