Autor Zpráva
frauen
Profil *
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
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 *
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 *
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
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 *
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
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
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 *
__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 *
Nox:
V config.php mám pouze údaje pro připojení k mysql, čili ji budu potřebovat pouze v dbConnect ne?
tiso
Profil
frauen: tak to tie údaje môžeš dať priamo do tej funkcie…
Nox
Profil
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 *
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
Nox: mne to vysvetľovať nemusíš…

frauen: neošetruješ chyby.
Nox
Profil
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 *
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

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0