Autor | Zpráva | ||
---|---|---|---|
Dot@z Profil * |
#1 · Zasláno: 25. 1. 2012, 22:48:57
Zdravím, mám soubor index.php do něho includuji:
include "db.php"; $......promene $mysqli = new mysqli($mysqlhost, $mysqluser, $mysqlpwd, $mysqldb); if ($mysqli->connect_errno) { printf("Chyba spojeni s DB: %s\n", $mysqli->connect_error); exit(); } $mysqli->select_db($mysqldb); $mysqli->set_charset('utf8'); Function FCE_html_formToken ($jmeno, $token) { $vyraz = "INSERT INTO `t_formtokenu` (`IDformtokenu`,`jmeno`,`zapsano`) VALUES('".$token."','".$jmeno."',NOW())"; $dotaz = $mysqli->query($vyraz); $zdroj = "<input type=\"hidden\" name=\"form_token\" value=\"".$token."\" />\n"; return $zdroj; } v indexu.php zavolám: echo FCE_html_formToken("yyyyyyyy", "xxxxxxxx"); Objektové mysqli se teprve začínám učit, můžete mi prosím poradit jak zviditelnit objekt $mysqli i ve všech funkcích (tedy pokud si to myslím správně, kde je chyba) Děkuju |
||
Kajman Profil |
#2 · Zasláno: 25. 1. 2012, 23:51:23
Proměnná $mysqli není videt uvnitř funkce. Můžete si ji např. předat parametrem.
|
||
Dot@z Profil * |
#3 · Zasláno: 26. 1. 2012, 17:10:30
Řešením má tedy být toto?
Function FCE_html_formToken ($jmeno, $token, $sql = $mysqli) { $vyraz = "INSERT INTO `t_formtokenu` (`IDformtokenu`,`jmeno`,`zapsano`) VALUES('".$token."','".$jmeno."',NOW())"; $dotaz = $mysqli->query($vyraz); $zdroj = "<input type=\"hidden\" name=\"form_token\" value=\"".$token."\" />\n"; return $zdroj; } Je toto řešení správné? Nedá se to řešit jinak? Dokud jsem programoval procedurálně a mysql extenzi, tak jsem si ve funkcích mohl volat příkazy do databáze, bez jakéhokoliv propojování proměnných, jednou zavolaný connect na stránce mi umožnil do DB přistupovat odkudkoliv. Je toto rozdíl v procedurálním a OOP přístupem k DB, nebo to lze řešit elegantněji? |
||
Kajman Profil |
#4 · Zasláno: 26. 1. 2012, 17:26:41
Ne, tak to nepůjde, šlo by ($jmeno, $token, $mysqli)
Můžete použít i to, na co jste zvyklý, tedy mysqli_query() |
||
Dot@z Profil * |
#5 · Zasláno: 27. 1. 2012, 18:28:24
Stále tedy vždy platí, že v předávaných paramtrech funkcí (ve kterých mysli příkazy chci použít) se musí předati i proměná pro připojení k DB?
Ať ve funkci použiji procedurální nebo OOP přístup k DB. |
||
Kajman Profil |
#6 · Zasláno: 27. 1. 2012, 20:08:48
Ne. Je to jedna z možností.
Můžete využít i vlastnosti objektu programované metody, vlastní třídu vracející vytvořený objekt spojení, globální proměnnou, ... |
||
Časová prodleva: 15 dní
|
|||
Marko_ Profil * |
#7 · Zasláno: 11. 2. 2012, 23:06:34
"Můžete využít i vlastnosti objektu programované metody, vlastní třídu vracející vytvořený objekt spojení, globální proměnnou, ..."
Jak to udělat? Extenze mysqli oproti původní mysql se v tomto přístupu liší (že již není vidět v celém projetku vč. funkcí)? |
||
Marko_ Profil * |
#8 · Zasláno: 12. 2. 2012, 07:37:08
Je toto v pořádku po stránce bezpečnosti?
Nebo je lepší (bezpečnější) předávat v každé funkci i link na DB connect? Function nejaka_funkce ($parametr1, $parametr2) { $mysqli = $GLOBALS['mysqli']; // nyni mohu pouzivat mysqli dotazy do DB return $neco; |
||
Kajman Profil |
#9 · Zasláno: 13. 2. 2012, 09:01:20
Marko:
„že již není vidět v celém projetku vč. funkcí)?“ Funkce vidět je, ale je u ní vyžadován identifikátor spojení. Případně je potřeba ji volat jako metodu. „Je toto v pořádku po stránce bezpečnosti?“ Z hlediska bezpečnosti asi ano. |
||
Časová prodleva: 11 let
|
0