Ansluta till en db genom att anropa en funktion

PHP

10 svar · 235 visningar · startad av FlashX

Medlem sedan nov. 19991 033 inlägg
Trådstart#1

Om jag använder

$db = mysql_connect("localhost", "user", "passwd");
mysql_select_db("db_name", $db);

i mitt php-dokument så fungerar det, fast istället för att använda koden på alla sidor, vill jag anropa en funktion istället.

Koden ser nu ut såhär:
I php-filen

<? require "main.inc" ?>
<?
openDB();
o.s.v.

och i main.inc har jag

function openDB() {
$db= mysql_connect("localhost", "user", "passwd");
mysql_select_db("db_name", $db);
}

men då fungerar det inte.

Hur gör jag för att ansluta och välja DB med function?

Medlem sedan maj 20002 993 inlägg
#2

Du måste skriva så här i mani.inc:

<?php
function openDB() {
$db= mysql_connect("localhost", "user", "passwd");
mysql_select_db("db_name", $db);
}
?>

Medlem sedan nov. 19991 033 inlägg
#3

Jo, det står så redan.
Jag har en header, menyer och lite annat och det funkar men inte just kopplingen till databasen.

Medlem sedan mars 20007 896 inlägg
#4

Chansning: det kanske inte går att öppna objekt via en function som inte är medlem av en class!

Skapa en class och du kommer att lyckas med det du vill ;)

Medlem sedan dec. 200012 464 inlägg
#5

Är det inte så att variabler i en funktion bara har scope inom funktionen.

Man kan kanske skriva så här i stället


<?php
function openDB() {
$db= mysql_connect("localhost", "user", "passwd");
mysql_select_db("db_name", $db);
return $db;
}
?>

och anropa


  $db = openDB();
Medlem sedan nov. 19991 033 inlägg
#6

Jo, det fungerade :)
Tackar så mycket.

Medlem sedan mars 20007 896 inlägg
#7

Juste så ere juh :)
Men det borde gå att komma runt. Prova med att sätta global $db... i funktionen. Möjligt att det funkar.
Då slipper man ett objekt utanför funktionen som man ändå inte använder.

Medlem sedan juni 20008 205 inlägg
#8

En annan variant vore ju:

function openDB() {
	if(defined("DBCONN")) return;
	define("DBCONN", mysql_connect("localhost", "user", "passwd"));
	mysql_select_db("db_name", DBCONN);
}

Så blir DBCONN en konstant. Asballt ;)

Medlem sedan nov. 19991 033 inlägg
#9

global $db; i function fungerar utmärkt :)
Nu kan jag ansluta och välja db med endast openDB(); vilket var målet.
Meningen är att det ska vara så enkelt som möjligt med anslutningen eftersom jag har ett par andra användare som hjälper till med sidan.
main.inc kommer att ligga utanför webbserverns DocumentRoot, vilket gör att den ej blir åtkomlig för dessa användare.

Hur väljer man db i ditt exempel spango.
Måste man ange det i själva php-filen då?

Är bara inne på mitt tredje dygn när det gäller PHP och mySQL, så man är ju lite färsk inom området :)

[Redigerat av FlashX den 14 apr 2001]

Medlem sedan juni 20008 205 inlägg
#10

Öh, förstår inte riktigt vad du menar :q
Den enda skillnaden mellan min och LarsG's variant är att i stället för att returnera en variabel (eller göra en global variabel - usch, nämn inte sånt i min närvaro ;) ) så deklareras en konstant, som alltid är global. När du du gör en query ser det alltså ut så här:

$result = mysql_query($dinFetaSQLSats, DBCONN); # Inget dollartecken

Dessutom klagar php-tolken om man försöker tilldela DBCONN ett annat värde än det som den fick från början.

Medlem sedan nov. 19991 033 inlägg
#11

Förstår inte heller vad jag menade :q
Troligen tillfälliga störningar bara :)

276 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
146 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)