webForumDet fria alternativet

Ansluta till en db genom att anropa en funktion

PHP

10 svar · 232 visningar · startad av FlashX

Medlem sedan nov. 19991 033 inlägg
Frågan#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);
}
?>

------------------
[klicka exakt precis här]

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 ;)

------------------
SPiN, bjorne.w@telia.com

-- §e Grr... --

[Redigerat av SPiN den 13 apr 2001]

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();

------------------
essentitia preter non sans multiplicandum

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.

------------------
SPiN, bjorne.w@telia.com

-- §e Grr... --

[Redigerat av SPiN den 13 apr 2001]

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 ;)

------------------
Life feeds on life feeds on life feeds on life feeds on life...

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.

------------------
Life feeds on life feeds on life feeds on life feeds on life...

[Redigerat av spango den 16 apr 2001]

Medlem sedan nov. 19991 033 inlägg
#11

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

267 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)