| 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: 14 let
|
|||
0