| Autor | Zpráva | ||
|---|---|---|---|
| frauen Profil * |
#1 · Zasláno: 2. 8. 2010, 13:56:35
Zdravím, řeším následující problém - snažím si připravit funkce pro komunikaci s MySQL. Narazil jsem však na problém, se kterým si nevím rady.
function dbConnect()
{
// Configuration file
require dirname(__FILE__) . '/../config/config.php';
$dbConnection = mysql_connect($config['mysql']['server'], $config['mysql']['username'], $config['mysql']['password']);
mysql_select_db($config['mysql']['database'], $dbConnection);
mysql_set_charset('utf8', $dbConnection);
return $dbConnection;
}
function dbDisconnect()
{
mysql_close($dbConnection);
}Potřeboval bych však, aby mi funkce dbConnect vracela $dbConnection, abych s proměnnou mohl pracovat i dále. Jak se dá toto vyřešit? Díky. |
||
| tiso Profil |
#2 · Zasláno: 2. 8. 2010, 14:01:56 · Upravil/a: tiso
frauen: funkcia dbConnect ti $dbConnection vracia, ale funcia dbDisconnect ju nepozná, predaj ju do nej ako parameter.
Okrem toho používať require vo vnútri funkcie je blbosť… |
||
| frauen Profil * |
#3 · Zasláno: 2. 8. 2010, 14:07:39
tiso:
Díky za radu. Jak by se tedy dalo upravit načtení config.php, abych ji mohl použít ve funkci dbConnect? |
||
| frauen Profil * |
#4 · Zasláno: 2. 8. 2010, 14:11:18
Když jsem zkusil:
function dbConnect()
{
// Configuration file
require dirname(__FILE__) . '/../config/config.php';
$dbConnection = mysql_connect($config['mysql']['server'], $config['mysql']['username'], $config['mysql']['password']);
mysql_select_db($config['mysql']['database'], $dbConnection);
mysql_set_charset('utf8', $dbConnection);
return $dbConnection;
}
function dbDisconnect($dbConnection)
{
mysql_close($dbConnection);
}
dbConnect();
dbDisconnect($dbConnection);Dostanu chybu: Notice: Undefined variable: dbConnection in C:\wamp\www\default\admin\mysql.php on line 27 Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in C:\wamp\www\default\admin\mysql.php on line 23 |
||
| Nox Profil |
#5 · Zasláno: 2. 8. 2010, 14:13:56
frauen:
dbConnect ten identifikátor vrací, ale ty ho nijak neukládáš... Mj. funkce pro připojení by neměla obsahovat načítání konfigurace (zvlášť pokud je tam i něco jinýho než konfig. db), to by se mělo dát jako parametr |
||
| frauen Profil * |
#6 · Zasláno: 2. 8. 2010, 14:15:41
Nox:
Jak bych ho měl tedy uložit? Měl bych tedy konfigurační soubor načíst mimo funkci a po té ho vložit jako parametr do funkce dbConnect? |
||
| __construct Profil |
#7 · Zasláno: 2. 8. 2010, 14:15:59
function dbConnect()
{
// Configuration file
require dirname(__FILE__) . '/../config/config.php';
$dbConnection = mysql_connect($config['mysql']['server'], $config['mysql']['username'], $config['mysql']['password']);
mysql_select_db($config['mysql']['database'], $dbConnection);
mysql_set_charset('utf8', $dbConnection);
return $dbConnection;
}
function dbDisconnect($dbConnection)
{
mysql_close($dbConnection);
}
$dbConnection = dbConnect();// uložíš si identifikátor pripojenia do premennej
dbDisconnect($dbConnection);// predáš identifikátor pripojenia funkcii |
||
| Nox Profil |
#8 · Zasláno: 2. 8. 2010, 14:17:13
frauen:
„Měl bych tedy konfigurační soubor načíst mimo funkci a po té ho vložit jako parametr do funkce dbConnect?“ Ano... stejně tu konfiguraci bude potřebovat víc částí, tak si ji načteš předtím v nějaké inicializační a pošleš do connectu |
||
| frauen Profil * |
#9 · Zasláno: 2. 8. 2010, 14:18:33
__construct:
Díky, funguje to. Chtěl bych se ještě zeptat, jak řešit načítání toho konfiguračního souboru, když ne uvnitř funkce dbConnect? |
||
| frauen Profil * |
#10 · Zasláno: 2. 8. 2010, 14:19:38
Nox:
V config.php mám pouze údaje pro připojení k mysql, čili ji budu potřebovat pouze v dbConnect ne? |
||
| tiso Profil |
#11 · Zasláno: 2. 8. 2010, 14:25:11
frauen: tak to tie údaje môžeš dať priamo do tej funkcie…
|
||
| Nox Profil |
#12 · Zasláno: 2. 8. 2010, 14:25:35 · Upravil/a: Nox
tiso:
To je jako doporučit psát CSS přímo do HTML... frauen: aha, no stejně bych o tom popřemýšlel.... jinak v tom případě by se to hodilo přejmenovat na database_config.php |
||
| frauen Profil * |
#13 · Zasláno: 2. 8. 2010, 14:32:58
Nakonec jsem dostal funkční řešení v této podobě:
// Configuration file
$config = require dirname(__FILE__) . '/../config/config.php';
/**
* Open a connection to a MySQL Server
*
* @param $config Configuration file
* @return $dbConnection MySQL link identifier
*/
function dbConnect($config)
{
$dbConnection = mysql_connect($config['mysql']['server'], $config['mysql']['username'], $config['mysql']['password']);
mysql_select_db($config['mysql']['database'], $dbConnection);
mysql_set_charset('utf8', $dbConnection);
return $dbConnection;
}
/**
* Close MySQL connection
*
* @param $dbConnection MySQL link identifier
*/
function dbDisconnect($dbConnection)
{
mysql_close($dbConnection);
}
$dbConnection = dbConnect($config);
dbDisconnect($dbConnection);
Myslíte, že toto už je použitelnější? Případně máte nějaké doporučení k tomuto kódu pro práci s MySQL? Díky. |
||
| tiso Profil |
#14 · Zasláno: 2. 8. 2010, 14:37:50
Nox: mne to vysvetľovať nemusíš…
frauen: neošetruješ chyby. |
||
| Nox Profil |
#15 · Zasláno: 2. 8. 2010, 14:38:35 · Upravil/a: Nox
dirname je vhodné uložit do nějaké konstanty
tohle bude fungovat pokud vím pokud v tom configu bude return toho arraye (což možná máš) ještě by se mohl ošetřit stav, kdy se nepovede k databázi připojit (false jako návratové hodnoty těch mysql_ funkcí) tiso: ok ok, sorry :) |
||
| frauen Profil * |
#16 · Zasláno: 2. 8. 2010, 14:46:54
Nox:
Config mám takto: $config = array(); // MySQL $config['mysql']['database'] = 'default'; $config['mysql']['password'] = ''; $config['mysql']['prefix'] = 'r'; $config['mysql']['server'] = 'localhost'; $config['mysql']['username'] = 'root'; Je to tedy v pořádku v ohledu s výše uvedeným kódem? „dirname je vhodné uložit do nějaké konstanty“ Jak to myslíš? „ještě by se mohl ošetřit stav, kdy se nepovede k databázi připojit (false jako návratové hodnoty těch mysql_ funkcí)“ Díky za upozornění, doplním. Předem díky za všechny rady. Chtěl bych si vytvořit konečně své stránky na vlastním menším "systému" tak bych chtěl, aby to bylo trochu použitelné a nebyla to "prasárna". Případně máte ještě další názory na řešení, se kterým mi tu pomáháte? Díky |
||
|
Časová prodleva: 16 let
|
|||
0