[MySQL] Które połączenie z bazą lepsze?

0

Używam takiej funkcji do pobierania ilości pozycji w bazie (i do innych zapytań analogicznie do tego):

function countBaza() {
    global $databasehost, $databasename, $tablename, $dbuser, $dbpass;
    @mysql_connect($databasehost,$dbuser,$dbpass) or die("Unable to connect to mySQL server");
    mysql_select_db($databasename);
    $sql = "SELECT * FROM ".mysql_escape_string($tablename);
    $result = mysql_query($sql) or die(mysql_error());
    return mysql_num_rows($result);
}

W tutorialach widziałem, że łączy się z bazą tak:

$msql = mysql_connect($databasehost,$dbuser,$dbpass);
...
mysql_close($msql); 

Która metoda jest lepsza?
Czym się różnią?
Co się stanie jak nie zamknę połączenia za pomocą mysql_close?
Po co jest ta @ w pierwszej metodzie (przy mysql_connect)?
Czy drugą metodę można tak zmienić, żeby w razie gdy nie można się połączyć z bazą - pokazało taki błąd jaki chcę jak to jest w metodzie pierwszej?

0

Teoretycznie i praktycznie obie te funkcje robią to samo tyle, że w inny sposób. Pierwszy kod "obsługuje" błędy, a drugi już nie.

Znaczek @ jest po to aby wyłączyć pokazywanie błedu jeżeli takowy wystąpi.

Jeżeli nie zamkniesz połączenia to potem będziesz musiał użyć następnego połączenia z bazą danych. Jeżeli limit połączeń do bazy zostanie wykorzystany to po prostu nie będziesz mógł dostać się mysql'a ;)

Możesz zrobić tą obsługę błędu w drugim skrypcie tak jak jest to w pierwszym przykładzie.

0

Więc jak przerobić pierwszą metodę aby połączenie było zamykane?

0

Zamień:
@mysql_connect($databasehost,$dbuser,$dbpass) or die("Unable to connect to mySQL server");
na

@$msql = mysql_connect($databasehost,$dbuser,$dbpass) or die("Unable to connect to mySQL server");

a potem po return tej funkcji daj
mysql_close($msql);

0

Po return mysql_close będzie działać ?

Czy to:

@$msql = mysql_connect($databasehost,$dbuser,$dbpass) or die("Unable to connect to mySQL server");

to to samo co:

$msql = @mysql_connect($databasehost,$dbuser,$dbpass) or die("Unable to connect to mySQL server");

?

0

Ad1. Będzie działać ;)
Ad2. Powinno być to samo, ale nie jestem pewny :d

0

nie jestem pewien czy mi się nie myli z JS czy z czymś ale wydaje mi się choć nie chce mi się sprawdzać - że po return już nic nie jest wykonywane więc to co masz po return powinieneś chyba raczej przypisać do zmiennej, zamknąć połączenie i dopiero return'ować tą zmienną

0
Adamo napisał(a)

nie jestem pewien czy mi się nie myli z JS czy z czymś ale wydaje mi się choć nie chce mi się sprawdzać - że po return już nic nie jest wykonywane więc to co masz po return powinieneś chyba raczej przypisać do zmiennej, zamknąć połączenie i dopiero return'ować tą zmienną

hmm - po głębszym zastanowieniu Adamo może mieć racje, nie mam teraz czasu sprawdzić, ale na wszelki wypadek najpierw zamknij połączenie z bazą mysql a potem daj return ;)

0

Tak mi się nasuneło skoro funkcja ma sprawdzać ilość rekordów to poco pobierać cały zestaw może prościej tak:

select count(*) as ile from nazwa_tabeli

Wygodniej i nie pobiera się żadnych danych...

1 użytkowników online, w tym zalogowanych: 0, gości: 1