PHP obiektowo - błąd

Witam, po dość długiej przerwie z PHP postanowiłem wrócić i coś pogrzebać. Dopiero co zacząłem, a już trafiłem na błąd:

<?php

class DataBase {


	public function DataBase($host, $login, $pass, $base_name) {

		@mysql_connect($host, $login, $pass) or die(mysql_error());

		@mysql_select_db($base_name) or die(mysql_error());

	}


	public function Execute($query) {

		mysql_query($query);

	}

}



$db = new DataBase('localhost', 'login', 'pass, 'nauka');

$user_ip = $_SERVER['REMOTE_ADDR'];

$rekord = $db->Execute("SELECT * FROM banned_ips WHERE login='$user_ip'"); 

$row = mysql_fetch_array($rekord);

echo $row['login']." - ".$row['ip'];

?>

Skrypt sie wyklada. Gdy natomiast zamienie $rekord = $db->Execute(“SELECT * FROM banned_ips WHERE login=’$user_ip’”); na $rekord = mysql_query(“SELECT * FROM banned_ips WHERE login=’$user_ip’”); wszystko dziala. W czym moze tkwic problem?

Cześć,

napisałeś:

$db = new DataBase(‘localhost’, ‘login’, 'pass, ‘nauka’);

zauważyłem, że przy pass brakuje zamykającego apostrofu '.

Gdyby jednak to nie pomogło to… nie wiem czy to ma jakiekolwiek znaczenie ale może zamiast:

public function DataBase($host, $login, $pass, $base_name)

dać:

public function __construct($host, $login, $pass, $base_name)

oczywiście utworzenie obiektu polega na tym samym ($db = new DataBase(…)).

Ogólnie dobrze jest przyjąć zasadę, że nazwy funkcji zaczyna się od małej litery (execute()) natomiast nazwy klas od wielkiej.

Btw. jaki błąd wykrzykuje Ci ten skrypt kiedy się wywala?

Pozdrawiam,

blazejowy.

Nie opisałeś błędu op pierwsze a po drugie piszesz że jak coś zmienisz to jest dobrze :slight_smile: więc chyba nie ma problemu xD

Tam przy ‘pass’ to moja literówka, w oryginale jest dobrze. Ale nie chodzi o to, że działa, tylko o sposób w jaki jest to zapisane. Chcę to w całości robić obiektowo, zapomniałem dodać, jaki bład wywala: “Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in…”

A spróbuj dać:

public function Execute($query) {

      return mysql_query($query);

   }

To nie to. Bo przez $db->Execute mogę dla przykładu tworzyć tabele czy coś dodawać, więc zapytanie działa.

EDIT: Temat do zamknięcia. Dzięki blazejowy, nie wpadłem na to, żeby dać “return”. Teraz gra i buczy :smiley: