Autor | Zpráva | ||
---|---|---|---|
qwert Profil * |
#1 · Zasláno: 15. 3. 2012, 21:58:05
Dobrý večer, dělám si skript který bude ukládat a vypisovat z databáze.
Mám třídu Database a v ní funkci Connection, která připojuje k databázi a pak funkci Query přes kterou půjdu všechny dotazy, zatím to není hotové, ale chtěl jsem vyzkoušet jestli funkce Query funguje, tak jsem si vytvořil instanci a vkládal funkční sql dotaz a hlásí mi to tyto chyby: Warning: mysql_query() [function.mysql-query]: Access denied for user 'a2952702'@'localhost' (using password: NO) in * on line 30 Free Web Hosting PHP Error Message Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in * on line 30 Takto vypadají ty dvě metody: public function Connection() { if(!$this->connection){ @$this->connection = mysql_connect(SERVER_NAME,SERVER_USER,SERVER_PASS); @mysql_select_db(SERVER_DB,$this->connection) or die('Databaze neexistuje'); return $this->connection; } } public function Query($sql) { if (is_string($sql) and !empty($sql)) { $this->result->connection = mysql_query($sql); return $this->result; }else throw new Exception("Chyba MySQL dotazu".$sql.": chybny zapis"); } děkuji moc za radu |
||
qwert Profil * |
#2 · Zasláno: 16. 3. 2012, 08:41:49
Věděl by někdo v čem je problém OOP se teprve učím a fakt netuším kde je chyba
Děkuju za radu |
||
Joker Profil |
Ehm, špatné heslo k databázi?
edit: Respektive se nepošle žádné heslo |
||
qwert Profil * |
#4 · Zasláno: 16. 3. 2012, 09:55:36
Nene v tom problém není, udělal jsem to trochu jinak, tochu víc blbě a divně a fungovalo to... heslo je správné
|
||
Joker Profil |
#5 · Zasláno: 16. 3. 2012, 10:09:35
qwert:
„Access denied for user 'a2952702'@'localhost' (using password: NO)“ znamená, že danému uživateli (a2952702) byl odepřen přístup, přičemž se připojoval bez použití hesla. Čili pokud tam má být heslo, tak se neposílá. |
||
qwert Profil * |
#6 · Zasláno: 16. 3. 2012, 10:12:53
No jo, ale proč se neposílá? heslo tam mám, včera jsem změnil query a fungovalo to, jenomže to byla úplná nehezká a pro OOP strašná ptákovina :)
Není problém s tím this->result->connection? |
||
Joker Profil |
#7 · Zasláno: 16. 3. 2012, 10:16:23
qwert:
„Není problém s tím this->result->connection?“ To je docela možné. A to @ tam potlačí chybové hlášky, takže se to tváří, jako by nic (potlačovat chybové hlášky není dobrý nápad). |
||
qwert Profil * |
#8 · Zasláno: 16. 3. 2012, 10:17:59
Takže co s tím tedka udělat?
|
||
Joker Profil |
Smazat @ a zkusit to znovu?
edit: Případně si rovnou ověřit obsah SERVER_NAME,SERVER_USER, SERVER_PASS a SERVER_DB |
||
qwert Profil * |
#10 · Zasláno: 16. 3. 2012, 10:30:34 · Upravil/a: qwert
smazal jsem všechny @, zkusil jsem si vypsat ty konstanty, vše bez problému, vsadil bych se že je problém s tím voláním ale nevím jak to upravit
Tak jsem zkusil pár pokusů a tohle funguje: public function Connection($sql) { if(!$this->connection){ $this->connection = mysql_connect(SERVER_NAME,SERVER_USER,SERVER_PASS); mysql_select_db(SERVER_DB,$this->connection) or die('Databaze neexistuje'); mysql_query($sql); return $this->connection; } } Což znamená že připojení k db je Ok, ale tohle nechci, chci mít zvlášt metodu query na zápis a pak bude metoda fetch a ta bude vracet výpis. Takže tohle je mi k ničemu, ale aspon víme že chyba je v Query() Celé to vypadá takto include "../constant.php"; class Database { /* * Trida pro pripojeni k databasi, zapis a vypis z db * * Nejnižší vrstva, pracuje s SQL příkazy, vstupni hodnoty jsou SQL dotazy, ne pole * */ private $connection = null; //Promena, ktera vytvori pripojeni k databazi private $result = null; /* * Navratova hodnota */ public function __construct() { } public function Connection($sql) { if(!$this->connection){ $this->connection = mysql_connect(SERVER_NAME,SERVER_USER,SERVER_PASS); mysql_select_db(SERVER_DB,$this->connection) or die('Databaze neexistuje'); return $this->connection; } } public function Query($sql) { if (is_string($sql) and !empty($sql)) //kontrola jestli je retezec a neni prazdny { $this->result->connection = mysql_query($sql); return $this->result; }else throw new Exception("Chyba MySQL dotazu".$sql.": chybny zapis"); } } //vytvoření instance: include "Database.php"; $db = new Database(); $sql = "INSERT INTO user(Jmeno,Prijmeni)VALUES('Karel','Karel')"; $db->Query($sql); |
||
qwert Profil * |
#11 · Zasláno: 16. 3. 2012, 11:34:01
Takže jsem se v tom trochu vrtal a už to funguje, akorát to hlásí chybu, ale do db ukládá:
public function Query($sql) { if (is_string($sql) and !empty($sql)) { $this->Connection()->result = mysql_query($sql); return $this->result; }else throw new Exception("Chyba MySQL dotazu".$sql.": chybny zapis"); } Fatal error: Can't use method return value in write context in /home/a2952702/public_html/DBL/Database.php on line 33 Co je to za chybu? 33 je opět ten řádek $this->Connection()->result = mysql_query($sql); |
||
Bertram Profil |
#12 · Zasláno: 16. 3. 2012, 11:53:26
qwert:
Uvědom si že návratová hodnota metody connection() není objekt s vlastností result do které chceš přidat hodnotu vrácenou z mysql_query. |
||
qwert Profil * |
#13 · Zasláno: 16. 3. 2012, 11:56:06
Aha no a jak to teda udělat? Rád bych potom vracel výsledek toho uložení, abych mohl kontrolovat jestli se uložilo nebo ne..
Tak jak to má teda vypadat? :) |
||
Bertram Profil |
#14 · Zasláno: 16. 3. 2012, 12:29:08
qwert:
„Tak jak to má teda vypadat?“ Upozorňuji, že to je jen ukázka toho, aby to vůbec fungovalo, nikoli správný návrh. <?php class Database { private $host; private $userName; private $pass; private $dbName; protected static $connection; public function __construct($host, $userName, $pass, $dbName) { $this->host = $host; $this->userName = $userName; $this->pass = $pass; $this->dbName = $dbName; } public function getConnection() { if (!self::$connection) { self::$connection = mysqli_connect($this->host, $this->userName, $this->pass, $this->dbName); } return self::$connection; } public function Query($sql) { return mysqli_query($this->getConnection(), $sql); } } $db = new Database("localhost", "root", "heslo", "databaze"); $sql = "SELECT * FROM user WHERE id = 1"; var_dump(mysqli_fetch_assoc($db->Query($sql))); |
||
qwert Profil * |
#15 · Zasláno: 16. 3. 2012, 18:24:54 · Upravil/a: qwert
Děkuji, je to zajímavé, jenom dotaz, je to použitelné i s mysql?
Ne jenom s mysqli |
||
Bertram Profil |
#16 · Zasláno: 16. 3. 2012, 18:45:03
qwert:
Tvá třída pro práci s databází bude použitelná tak jak si ji napíšeš. Kvalitní OO knihovny pro práci s databází jsou napsány pro více databázových systémů a je na tobě, který budeš používat. Nebudu tu takovou knihovnu raději uvádět, protože jsou tu jedinci, kteří by to nemusely ukočírovat :) |
||
qwert Profil * |
#17 · Zasláno: 16. 3. 2012, 19:24:27
No já si právě chci něco podobného naprogramovat sám, stáhl jsem si několik podobných systémů, koukám jak to dělali jiní a chci se tím že si taky něco takovýho naprogramuju naučit OOP, no ale zatím jenom tak trochu tápu
|
||
Časová prodleva: 12 let
|
0