Autor | Zpráva | ||
---|---|---|---|
jefitto44 Profil |
#1 · Zasláno: 15. 12. 2014, 16:07:51
Chcel by som konečne prejsť na PDO štruktúru práce s databázou v PHP... mám jeden systém, v ktorom sa používajú staré mysql_query a chcel by som to akosi vylepšiť (najlepšie objektovo).
Teraz to vyzerá takto: $connect = mysql_pconnect(host, username, password); if ($connect) { mysql_select_db(name); mysql_query("SET character SET utf8;"); mysql_query("SET names utf8;"); } A chcel by som to prerobiť na PDO, lenže - používam permanent connect, nechce sa mi pri každom dotaze na databázu vytvárať new PDO - odkiaľ vezmem tú PDO triedu? Ak tam nebude, podľa čoho bude program vedieť, že new PDO je práve to PDO? Či to už je nejako automaticky vkomponované do PHPčka ako takého? - zatiaľ to robím na localhoste (WAMP) s verziou PHP 5.5 (ak sa nemýlim). Short tágy povolené Ako to mám prerobiť? |
||
Trsak Profil |
#2 · Zasláno: 15. 12. 2014, 16:22:16
A proč nepoužít mysqli? Rozdíly v syntaxi s mysql jsou minimální
|
||
Kcko Profil |
#3 · Zasláno: 15. 12. 2014, 16:22:41
jefitto44:
Chceš to vylepšit a objektově? Použij mysqli |
||
jefitto44 Profil |
#4 · Zasláno: 15. 12. 2014, 16:34:33 · Upravil/a: jefitto44
No takto... teraz to mám tak ako som uviedol... a chcem to prerobiť na PDO:: proste objekty... teraz mi došlo, že keď je tam štvorbodka, tak žiadnu inštanciu netreba :D...Vytvoril som si zatial niečo také
$connId = new PDO('mysql:host=localhost;dbname=test', DB_USERNAME, DB_PASSWORD, array( PDO::ATTR_PERSISTENT => true )); Vypisuje mi MySql Error (1046): No database selected na stránke... mysqli je mŕtve... Nechápem tomu... nemohol by mi prosím niekto ukázať hotové a funkčné PDO? Resp. kde by som mal také niečo hľadať? |
||
Taps Profil |
#5 · Zasláno: 15. 12. 2014, 16:58:13
jefitto44:
„nemohol by mi prosím niekto ukázať hotové a funkčné PDO“ mrkni na http://jecas.cz/php-pdo |
||
Trsak Profil |
#6 · Zasláno: 15. 12. 2014, 17:16:39
jefitto44:
mysqli vůbec není mrtvé, kde si na to přišel? |
||
jefitto44 Profil |
#7 · Zasláno: 15. 12. 2014, 17:20:00
Všetci dnes už aj tak vyžadujú OOP, načo sa budem babrať s nejakým mysqli... ale je to len môj názor... proste to chcem cez PDO... k databáze sa mi podarilo na základe jecas návodu pripojiť... Ale
Ako prevediem query? Vyskúšal som toto $kvery=$db->query("SELECT * FROM ".TABLE_PREFIX."menu WHERE ?"); Na jecas píšu, že v tom $kvery má byť výsledok query, ktorý som poslal do databázy... ibaže ja tam nemám nič. A navyše, ako to mám potom pustiť do while-u ? $kvery=$db->query("SELECT * FROM ".TABLE_PREFIX."menu WHERE 1"); while($row=mysql_fetch_array($kvery)) { echo $row["sk_name"]; } V tom $kvery podľa var_dump funkcie nemám nič iné ako "SELECT * FROM PREFIX_menu WHERE 1", čo je síce pekné, ale ja som očakával, že mi to už vráti výsledky z DB... a navyše while vyhadzuje chybu, že očakáva aspoň jeden parameter... ako sa s tým robí? Existuje tisíc návodov, ale všade sú len príklady toho-ktorého autora a tak to neviem použiť v reálnom živote... |
||
lionel messi Profil |
jefitto44:
„Všetci dnes už aj tak vyžadujú OOP, načo sa budem babrať s nejakým mysqli“ MySQLi má aj objektový prístup ako plnohodnotnú alternatívu k procedurálnemu a všetky výhody s ním spojené. „SELECT * FROM PREFIX_menu WHERE 1“ Totálne nezmyselný dotaz, netreba sa čudovať, keď ti nefunguje. Čo chcel básnik povedať tým WHERE 1 ?
Náčrt správneho prístupu cez PDO: $kvery=$db->query("SELECT * FROM ".TABLE_PREFIX."menu"); $vysledky = $kvery->fetchAll(); foreach ($vysledky as $vysledok) { echo $vysledok["id"]; //vypíše id } V praxi si samozrejme budeš chcieť ošetriť výnimky v try/catch blokoch, ale to som ad hoc zanedbal. |
||
Trsak Profil |
#9 · Zasláno: 15. 12. 2014, 17:43:57
mysqli má i objektovou variantu..
Pleteš si to se samotným mysql. |
||
jefitto44 Profil |
#10 · Zasláno: 15. 12. 2014, 17:47:49
Nepletem, ale doteraz som s ničim inym ako samotnym mysql_query nerobil, takže sa v otm nevyznám... problém bol samozrejme v tom, že ten strovberyho článok som nedočítal do konca... už mi to fachčí... len sa do toho potrebujem dostať, kým to budem písať automaticky, narobím kopec kadejakých errorov...
|
||
pcmanik Profil |
#11 · Zasláno: 15. 12. 2014, 18:03:43
lionel messi:
Nieje to nezmyselný dotaz, jednoducho sa to vyhodnotí ako true a vyberú sa všetky riadky - prakticky žiadny rozdiel oproti tomu keď sa to tam neuvedie. Jedinú výhodu vidím v tom keď to tam phpmyadmin dopĺňa, že netreba písať where ale uz je tam a stačí odmazať tú jednotkuc |
||
jefitto44 Profil |
#12 · Zasláno: 15. 12. 2014, 18:11:22
A teraz som sa stretol s problémom, že mi neprejde podmienka mysql_num_rows, čo je pochopiteľné, ale ako spočítam výsledky v PDO? Ak bude výsledkov viac ako 0, tak nech dačo rpebehne, inak nech neprebehne... klasicky
if(mysql_num_rows($premenna)>0) { toto} else {toto} |
||
lionel messi Profil |
jefitto44:
php.net/manual/en/pdostatement.rowcount.php |
||
jefitto44 Profil |
#14 · Zasláno: 15. 12. 2014, 18:31:02
Dobre takže tomu rozumiem... najprv potrebujem poslať kvery na databazu... potom to fečnuť všetko do dajakej tretej premennej... a akoby toho nebolo dosť, tak to ešte pustiť cez foreach... ale ako sa to dá urobiť cez while? Dakde som čítal, že výsledky sa dajú vypísať buď cez foreach, alebo cez while... a cez while mi to nijako nejde... ukázal by mi niekto spôsob?
|
||
Fisir Profil |
#15 · Zasláno: 15. 12. 2014, 18:33:30
Reaguji na jefitta44:
Prosím, nevymýšlej si slovenské patvary anglických slov, ano? while($row = $query->fetch(PDO::FETCH_ASSOC)){ var_dump($row); } |
||
jefitto44 Profil |
#16 · Zasláno: 15. 12. 2014, 19:15:46
Dobre, presvedčili ste ma... serem na to. Čo sa týka mysql_query, stačí prepísať na mysqli_query a problem fixed? V OOP ešte na tom očividne nie som tak dobre, aby som dokázal celý redakčný systém zmeniť z mysql_query na PDO...
|
||
lionel messi Profil |
#17 · Zasláno: 15. 12. 2014, 19:23:36
jefitto44:
„stačí prepísať na mysqli_query a problem fixed?“ Ešte treba dopísať jeden povinný argument: mysqli_query |
||
jefitto44 Profil |
#18 · Zasláno: 15. 12. 2014, 19:33:54
Čiže nechám ten pôvodný PCconnect, alebo môžem použiť aj ten PDO? Vlastne tam ide iba o to, že do toho povinného argumentu vlastne vkladám premennú s pripojením na databázu ak som dobre pochopil?
|
||
Fisir Profil |
#19 · Zasláno: 15. 12. 2014, 19:51:59
Reaguji na jefitta44:
Hledáš si odpovědi na tvoje otázky, zkoušíš to nějak vyřešit, nebo je sem jenom bez přemýšlení plácáš? Napsal jsem návod pro přechod z mysql_* na MySQLi.
|
||
Kcko Profil |
#20 · Zasláno: 16. 12. 2014, 10:05:49
Upřímně, pokud si myslíš, že v nějakém tvém "CMS" změníš volání dotazů na DB z mysql_query na něco jako $query->select(); a máš to super objektové a pak se tím můžeš chlubit, tak vůbec nechápeš význam OOP.
|
||
jefitto44 Profil |
#21 · Zasláno: 16. 12. 2014, 10:14:38
Nikto sa nechce chlubit... chcem proste odstrániť deprecated veci
|
||
Kubo2_ Profil * |
#22 · Zasláno: 17. 12. 2014, 12:55:21
jefitto44:
„chcem proste odstrániť deprecated veci“ No, tak to by sa najprv hodilo vedieť rozlišovať, ktoré to sú tie „deprecated veci“. |
||
jefitto44 Profil |
#23 · Zasláno: 17. 12. 2014, 16:45:42
To sú tie, pri ktorých mi vypíše E_DEPRECATED predpokladám...
|
||
Kubo2 Profil |
#24 · Zasláno: 17. 12. 2014, 18:44:02
jefitto44:
V tom prípade netuším, prečo si medzi ne zaradil aj mysqli. |
||
Časová prodleva: 9 let
|
0