Autor Zpráva
jefitto44
Profil
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
A proč nepoužít mysqli? Rozdíly v syntaxi s mysql jsou minimální
Kcko
Profil
jefitto44:
Chceš to vylepšit a objektově? Použij mysqli
jefitto44
Profil
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
    ));
Konštanty mám určené správne v inom súbore...

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
jefitto44:
nemohol by mi prosím niekto ukázať hotové a funkčné PDO
mrkni na http://jecas.cz/php-pdo
Trsak
Profil
jefitto44:
mysqli vůbec není mrtvé, kde si na to přišel?
jefitto44
Profil
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
mysqli má i objektovou variantu..

Pleteš si to se samotným mysql.
jefitto44
Profil
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
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
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
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
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
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
jefitto44:
stačí prepísať na mysqli_query a problem fixed?
Ešte treba dopísať jeden povinný argument: mysqli_query
jefitto44
Profil
Č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
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
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
Nikto sa nechce chlubit... chcem proste odstrániť deprecated veci
Kubo2_
Profil *
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
To sú tie, pri ktorých mi vypíše E_DEPRECATED predpokladám...
Kubo2
Profil
jefitto44:
V tom prípade netuším, prečo si medzi ne zaradil aj mysqli.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: