Starší komentáře ke článku: Zjednodušte si práci s MySQL

Zpět na článek | Úvodní stránka Interval.cz

Avatar

Autor komentáře: Vita

Datum vložení: 15.5.2003 1:00:02

No nevim. Vypada to pekne ale ja na to mam funkci ktera si myslim je jeste o neco lepsi. Prece jen, objekt je pekny jenze...
a) me funkce vraci vzdy vysledek nebo false, logovani do souboru je uplne stejne. Rozdil je v tom ze vrati
- id po vlozeni do autoincrementu
- pocet ovlivnenych radku po update/insert/delete
- nebo result pri ostatnich (show, desc, select...)

Takhle se vam muze snadno stat ze neco vlozite a ono vam zustane nekde neco viset. Je to pekne ale chtelo by to trosku dotahnout.

Kazdopadne diky za clanek :)

Avatar

Autor komentáře: Ondrej Ivanic

Datum vložení: 15.5.2003 1:39:38

Konecne po dlhom case nieco co stoji za to! Sice to nevyuzijem, lebo pouzivam PostgreSQL a na MySQL som uz davno zabudol.

BTW: co takto hrusky?
<a href='http://pear.php.net/packages.php?catpid=7&catname=Database' target='_blank'>http://pear.php.net/packages.php?catpid=7&catname=Database</a>. Baliky MDB alebo DB su velmy dobre...

Avatar

Autor komentáře: Zdenek Bohdanecky

Datum vložení: 15.5.2003 11:46:39

Ja si zvykl na ADOdb. Jeji pouzivani je mi blizsi nez PEAR. Dle udajnych benchmarku je 2x rychlejsi nez PEAR a o 10 % rychlejsi nez PhpLib.

<a href='http://php.weblogs.com/ADODB' target='_blank'>http://php.weblogs.com/ADODB</a>

Avatar

Autor komentáře: Dave G.

Datum vložení: 15.5.2003 14:56:59

Asi kazdy, kdo trosku vic zacne pracovat s SQL, si casem nejakou podobnou knihovnu vytvori, bez ni to ani nejde.... Navic kdyz cast mych klientu hostuje na microsoft SQL a druha cast s MySQL, musel jsem si udelat knihovnu univerzalni a vsechny problemy byly pryc.

Avatar

Autor komentáře: Jirka Kocman

Datum vložení: 17.5.2003 5:35:23

Osobne jsem si napsal v podstate obdobnou knihovnu (www.komplikator.cz/db_class.php). Mam ji napsanou pro MySQL a Sybase ASE, ale bohuzel ta druha je jiz dost neaktualni. Predevsim obsahuje metody se stejnym nazvem vyjma predpony, tzn misto mysql_query ci sybase_query je to metoda db_query...
Také jsem udělal několik způsobů logování, jeden je jen debugovací, tzn vypisuje chyby z sql a druhý vlastně taky - zobrazuje se kompletní sql dotaz a čas. Další debug metodu je show_data - zobrazí jednoduchou html tabulku s názvy sloupců a jejich obsahem, za použití jednoho parametru je tyto data možné získat ve formátu CSV. Obsahuje samozřejmě i jiné pro mysql a sybase neobvyklé funkce jako jsou odbc_fetch_into...
Samozřejmostí je i metoda pro vytvoření stránkování - listování ve výsledku.

Avatar

Autor komentáře: njubiodkosti

Datum vložení: 16.5.2003 12:02:42

zdarec.. tohle je bozi ale trapim se z jednou veci. mam script kde pomoci incrementace $i++ vyjede 10 inputu name=name$i , tzn mam deset promenych a chtel bych aby se tech deset promenych dalo do databaze UPDATOVALo, jak na to?
asi taky pres $i++, ale jak to udelat s classama :] ? jsem njubiii tak sorry..

Avatar

Autor komentáře: Vita

Datum vložení: 16.5.2003 12:37:08

Blbej navrh. Kdyz uz, pojmenuj si je name='name[". $i++ ."]'

Pak ti to prijde v poli - a pak jednoduse budes volat ten update pomoci nake smycky. Idealne
if (is_array ($_POST ['name'])) {
foreach ($_POST['name'] as $tid = $tval)
a tady zavolas update s parametry ktere vkladas, tzn. s name a id.

Ja si tu tridu prave prepisuju do trosku megalomanske hruzy :)

Avatar

Autor komentáře: Jméno a příjmení

Datum vložení: 16.5.2003 15:56:14

Kdyz uz, pouzijte "chameleona", tedy name='name[]', viz <a href='http://interval.cz/clanek.asp?id=671' target='_blank'>http://interval.cz/clanek.asp?id=671</a>

Avatar

Autor komentáře: PsYcHo

Datum vložení: 22.5.2003 16:38:14

Jenom osobní názor, přecejenom ten mysql.class.php má cca 5 kB.. neni to trochu velký, nebo nespomaluje to chod scriptu, když se musí provádět script který je 5 kB velký ??

Avatar

Autor komentáře: Michal Šulek

Datum vložení: 27.5.2003 14:59:04

A co takto pripojit sa na databazu v konstruktore triedy, nastavit clensku premennu pre identifikator spojenia (malo kedy sa sice pouzije ale predsa). A potom ked nam ide o to aby sa skriptom "netahali" pomocne premenne, naco uvadzat parameter identifikatora resultsetu v metodach query(), result() atd.

Ja som urobil metodu Work(), ktora vykona SQL prikaz /MySQL_query/ a identifikator resultsetu ulozi do clenskej premennej. Mozno to nie je najlepsi sposob, ale zdalo sa mi to pohodlne...

Ale ten dubugger si asi ukradnem :)

Avatar

Autor komentáře: vyrostek

Datum vložení: 19.8.2003 16:26:49

Zajimalo by me jak to autor tedo tridy dela, pokud chce napr INSERTnout hodnotu nake fce? array('datum'=>'now()') ani jine skopiciny co jsem zkousel jaxi nefunguje :/ Delam neco spatne? Nebo na to autor nemyslel. Tak now() se da jeste nahradit pomoci PHP budiz i kdyz to je pakarna, ale treba u password() uz je to asi problem. Predem diky za odpoved.

Avatar

Autor komentáře: Michal

Datum vložení: 17.2.2005 19:58:49

Jde to udelat pohodlně pomocí synonym jako 'now() AS ted'

Avatar

Autor komentáře: Arthur

Datum vložení: 13.1.2004 20:13:47

function db($sql, $if=1)
{
$vysl = @mysql_query($sql);

if (!$vysl && $if == 1)
{
//echo $sql;
return false;
}
$pole = array();

for ($count=0; $row = @mysql_fetch_array($vysl); $count++)
$pole[$count] = $row;

return $pole;
}

Co si myslite o teto funkci? Ktera vse strka do pole... myslite, ze to zatezuje apache hodne? Diky.

Avatar

Autor komentáře: Jiří Kocman

Datum vložení: 11.2.2005 0:12:34

function db_Fetch_All_Into(&$pole, $sql = null, $count = 0, $start = 0) { $pole = array(); // reset pole if ($sql != null) $this->SQL = $sql; $radku = $this->db_num_rows(); $this->db_Data_Seek($start); if ($count == 0 || ($start + $count) > $radku) { while($row = $this->db_fetch_assoc()) { $pole[] = $row; } } else { for ($i = $start; $i < $start + $count; $i++) { $pole[] = $this->db_Fetch_Assoc(); } } return $radku; } tohle má více variant a je už to pěkně stará záležitost, takové dva, dva a půl roku :)

Avatar

Autor komentáře: Vermin

Datum vložení: 11.2.2005 10:02:43

Neni zbytečna ta start a count hodnota? na tohle je lepsi pouzit treba limit v mysql.

Avatar

Autor komentáře: Vojta

Datum vložení: 2.3.2005 13:20:20

No chtel bych se zeptat jestli neexistuje nejaka trida napsana primo od autoru php. Myslel jsem ze to je mysqli nebo tak neco. Ono je hezke si to napsat sam, ale podpora databazi je jedna z veci na kterych php stavi a precejen bych rek ze kdyz neco napise tym programatoru toho jazyka ze to bude univerzalnejsi, protoze kdyz si napisu vlastni nebo pouziju Vasi, nikdo to nebude upgradovat a bude to asi takove ... trochu neciste. Ja nechci urazet Vasi praci( ani svoji ), jen se ptam jestli neco takoveho neexistuje primo v PHP.

Avatar

Autor komentáře: Vít Peprníček

Datum vložení: 3.3.2005 18:57:02

http://pear.php.net/ je tam několik tříd pro práci s db, jsou komplexnější než má třída, kompletně objektově orientované, třeba návratová hodnota funkce pro vykonání dotazu je objekt který umožňuje sosat výsledky zase nějakou metodou.takze treba získání počtu záznamů bude vypadat nějak takto $result = $db->execute('select count(id) from tabulka'); $row = $result->fetchRow(); $row_count = $row[0]; U mé třídy to jde takto $row_count = $db->query_result('select count(id) from tabulka'); Mou třídu jsem psal pro zjednodušení obvyklých postupů. Ani tak nezáleží jak je třída "univerzální" ale jaký je užitek při jejím použití, to samozřejmě záleží na způsobu programování, na typu projektu ....

Avatar

Autor komentáře: Gregor

Datum vložení: 12.4.2005 21:34:45

danu triedu som prerobil do monostate/statickej triedy... Lepsi pristup a praca s nou... kto to chce pouzit stiahnite si obidva subory http://files.elepha.info/show.php?show=class/mysql.class.php http://files.elepha.info/show.php?show=class/singleton.class.php

Avatar

Autor komentáře: Japan

Datum vložení: 18.6.2005 11:53:21

Lama dotaz: tohle je jenom pro PHP5?

Avatar

Autor komentáře: Zdendys

Datum vložení: 7.3.2006 23:41:19

Pro ukázku dávám i svojí zjednodušenou funkci pro práci s databází, vkládám jí na začátku každé stránky, není sice objektová a určitě tam najdete nějaké chybky, ale já jí s úspěchem hojně používám... např. $vysledky = db_dotaz("SELECT * FROM tabulka"); vrací pole s výsledky nebo prázdné Používá vnější funkci critical() která vypíše chybovou stránku a ukončí script. funkce má tyto parametry : db_dotaz(dotaz,[kritická],[text chyby]) nepovinné jsou kritická : hodnota 1 nebo 0, určuje jestli chyba dotazu ukončí další běh scriptu či ne text chyby : se zobrazí v případě kritické chyby uživateli $db_server = "server"; $db_user[0] = "jmeno"; $db_pass[0] = "heslo"; $db_name[0] = "database"; $db_use = 0; $db_res = array(); // výsledky databázových dotazů $db_err = array(); // chyby dotazů $db_cnt = 0; // počet řádků ve výsledku (ovlivněných řádků) // spojení se serverem if ($db_link = @mysql_connect($db_server,$db_user[$db_use],$db_pass[$db_use])) { $db_res[]="\nUživatel <b><i>".$db_user[$db_use]."</i></b> byl přihlášen k MySQL serveru <b><i>$db_server</i></b>."; } else { $db_err[]="\nK serveru <b><i>$db_server</i></b> nelze připojit uživatele <b><i>".$db_user[$db_use]."</i></b>."; critical("Kritická chyba v MySQL"); }; if (@mysql_select_db($db_name[$db_use])) { $db_res[]="\nDatabáze <b><i>".$db_name[$db_use]."</i></b> byla připojena"; } else { $db_err[]="\nDatabáze <b><i>".$db_name[$db_use]."</i></b> nelze připojit"; critical(); }; function db_dotaz($dotaz,$crit = 0,$crit_text = "Kritická chyba v MySQL výsledku !") { global $db_res,$db_err,$db_link,$db_cnt; $db_vysledky = array(); if ($data = @mysql_query($dotaz)) { $is_select = (strpos(substr($dotaz,0,10),"SELECT") === false ) ? 0 : 1; // s ohledem na vnořené dotazy hledá jen v prvních deseti znacích dotazu $is_update = (strpos(substr($dotaz,0,10),"UPDATE") === false ) ? 0 : 1; $is_insert = (strpos(substr($dotaz,0,10),"INSERT") === false ) ? 0 : 1; $radky = $is_select ? "obsahuje ".mysql_num_rows($data)." řádků" : "ovlivnil ".mysql_affected_rows($db_link)." řádků"; $db_cnt = $is_select ? mysql_num_rows($data) : (($is_update || $is_insert) ? mysql_affected_rows($db_link) : 0); $db_res[]= "\nDOTAZ : \"<b><i>$dotaz</i></b>\"\n vrátil pozitivní výsledek, $radky."; if ($is_select) { $n=0; while($vysl = mysql_fetch_assoc($data)) { $db_vysledky[$n]=$vysl; $n++; }; } else { $db_vysledky[0] = $data; }; } else { $db_err[]= "\nDOTAZ : \"<b><i>$dotaz</i></b>\"\n neproběhl.\n#".mysql_errno()." : ".mysql_error(); if ($crit) { critical($crit_text);}; }; return ($db_vysledky); }; function db_report() // Generuje html hlášení z MySQL { global $db_res,$db_err; $report = ""; $report.= count($db_res) ? "\n<hr><h3>Databázové výsledky :</h3> ".implode("\n
",$db_res) : "\n<hr>V průběhu programu nebyla použita MySQL databáze."; $report.= count($db_err) ? "\n<hr><h3>Databázové chyby : </h3>".implode("\n
",$db_err) : "\n<hr>V průběhu programu nedošlo k chybám v MySQL."; return($report); }; Koukám že to špatně interpretuje některé HTML značky. Jakékoli podnětné připomínky uvítám. vrz@seznam.cz Zdendýs

Avatar

Autor komentáře: Vilém Málek

Datum vložení: 8.3.2006 7:18:14

HTML značky se neinterpretují vůbec, interpretují se pouze vybrané BBCode značky, které interpretor vyhodnotí jako povolené a bezpečné. Vzhledem k zápisu vašeho kódu tipuji, že byl vyhodnocen jako ne zcela bezpečný a tudíž nebyl interpretován ;-)

Avatar

Autor komentáře: Lama

Datum vložení: 3.2.2008 21:57:46

jsem je mirne pokrocily, ale tridu class tMySql zvladam, ovsem chtel bych ji rotchodit v jine tride a nemuzu na to prijit, zas az tak zdatny nejsem, muze mi nekdo poradit? bohuzel mi to vraci i to co nechci, jmeno, heslo... class users extends tMySql { function __construct() { $sql=$this->connect(); $povel = "select * from user where id_user = 10001 limit 1"; $sql=$this->query("row",$povel); if (($row = $sql=$this->fetch_assoc("row"))) { $row["jmeno"]; $row["nickname"]; } $sql=$this->free_result('row'); return $row; } }

Avatar

Autor komentáře: Murděj Ukrutný

Datum vložení: 5.2.2008 10:50:04

Stačí upravit select * from user where id_user = 10001 limit 1 na select jmeno, nickname from user where id_user = 10001 limit 1 Ta * znamená že mají vybrat všechny sloupce, pokud je zadán jen seznam sloupců vyberouýrají se jen sloupce ze seznamu.

Avatar

Autor komentáře: Joker

Datum vložení: 26.11.2008 13:48:08

Prosim vás nevim jak ale porat mi to hazi neco Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\Program Files\VertrigoServ\www\phorum\db.php on line 5 Nepodařilo se připojit k MySQL databázi daly by ste mi sem soubor db.php

Avatar

Autor komentáře: Joker

Datum vložení: 27.11.2008 10:10:25

prosim vás poradil by mi nekdo ???

Avatar

Autor komentáře: Murdej

Datum vložení: 27.11.2008 11:06:37

Pise to Access denied takže bude problém v heslu nebo loginu. Existuje v db uživatel ODBC? Da se pripojit ze stejnými údaji v textovém klientu?

Zpět na článek | Úvodní stránka Interval.cz