Păi numa' tu ai probleme de-astea...
Oh really? Serveste-o p-asta:
In toate programele mele PHP din ultimii 10 ani am folosit functii wrapper pentru comunicarea cu baza de date. Ma asteptam sa trebuiasca sa schimb baza de date si nici in ruptul capului n-as mai fi modificat toate programele. As fi modificat doar functiile astea. Ei, pana acum n-a fost nevoie. A mers Firebird-ul fara nici o problema. Functiile arata asa:
- M95SQL() => face conectarea la baza de date. E mai mult interna, ca e apelata din celelalte functii daca nu-i nici o conexiune deschisa.
- M95SQL
Trans(), M95SQL
Commit(), M95SQL
Revert() => deschide / salveaza / anuleaza o tranzactie
- M95SQL
Prep(string $query) => face un prepared statement si returneaza variabila (resource)
- M95SQL
Exec(resource $prep_stmt, array $data) => executa statement-ul cu datele din array (oricate ar fi) si returneaza
array cu toate randurile (select) sau
int cu nr. de randuri afectate (insert/update)
Acum, a se construi functia generica M95SQLExec() pentru PHP7 si mysql/mariadb=>
EPIC FAIL
De ce? Pentru ca, spre deosebire de Firebird,
- Nu merge direct
execute, trebuie intai
bind_param
-
bind_param nu merge direct cu lista de variabile, vrea si TIPUL LOR!!! Deci pune-te si inspecteaza fiecare varibila din array sa vezi ce tip e!
- Big fucking problem cu NULL, ca n-are tip definit! Cauta... citeste... testeaza...
- Mai intreaba unu' speriat ce se intampla daca trebuie introdus un SQL
bigint, ca int din php e mai mic! OH F**KING SHIT!!! AM SI EU BIGINT!!! Stai iar si cauta... citeste... testeaza...
- Nu mai merge sa faci direct
call_user_func_array("mysqli_stmt_bind_param", $arr_data), ca trebuie
pass by reference. Deci hai ca asta e usor dupa ce ai inspectat tipul de variabile!
-
execute nu mai returneaza direct rezultatul sa-l iau cu
fetch. Trebuie
bind_result.
- Dar stai!
bind_result vrea lista de coloane. De unde naiba sa stiu lista de coloane intr-o functie generica?!?!
Bah, astia chiar gandesc cu curu'!?
Hai zi ca numai eu fac wrapper pentru SQL sau numai eu fac SELECT * cu prepared statement?