Echivalent la mysql_result in PDO

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
CristianAlexandru17
Mesaje:13

Echivalent la mysql_result in PDO

Salut,

Am inceput sa fac migrarea la PDO la mine pe site, si m-am conectat la baza de date intr-un fisier "connect.php" cu mysql, iar in "pdo_connect.php" cu pdo.
As'fel, pe masura ce migrez la pdo, sa ma pot loga pe site si sa pot testa cum au decurs interogarile prin PDO.

Trecand la subiect exista in mysql o functie si anume mysql_result. Mai precis am o functie care vreau sa returneze daca ceva apartine, utilizatorului logat (in cazul meu albumele foto).

Am functia:

Cod: Selectaţi tot

function album_check($album_id){
   $album_id = (int)$album_id;
   global $db;
   $query = $db->query("SELECT COUNT(`album_id`) FROM `albums` WHERE `album_id` = $album_id AND `user_id` = ". $_SESSION['...']);
   
   return (mysql_result($query, 0) == 1) ? true : false;
 }
Cum pot scrie in pdo linia?

Cod: Selectaţi tot

return (mysql_result($query, 0) == 1) ? true : false;
N-am gasit pe nicaieri, cum pot scrie in pdo functia "mysql_result()"

O alta intrebare ar fi.. in pdo, cum functioneaza real_escape_string? sau pot folosi doar prepare()... execute()?
Fortarea caracterelor sa fie de tip int se face tot cu "(int)" si in pdo?

Multumesc!

MarPlo Mesaje:4343
Salut
Nu cunosc daca exista echivalent la "mysql_result()" in PDO; dar cred ca nici nu e nevoie, exista alta metoda. De exemplu, se poate verifica cu "columnCount()" numarul de coloane returnate.

Cod: Selectaţi tot

return ($query->columnCount() > 0) ? true : false;
Daca folosesti prepare() si execute(), nu mai trebuie "real_escape_string", datele sunt automat filtrate (daca valorile de la comanda SQL sunt transmise separat).
Vezi in exemplele din lectiile PHP PDO de pe site: https://marplo.net/php-mysql/lectii.html

- Personal recomand Clasa PDO_MySQLi ; e usor de folosit. Cu ea puteti efectua instructiuni SQL fara sa cunoasteti MySQLi sau PDO, nu conteaza daca serverul are doar MySQLi sau PDO; si chiar usureaza scrierea de cod pentru lucrul cu MySQL in PHP.
Are o proprietate: num_rows ce contine numar de randuri selectate de instructiunea Select, se poate folosi in loc de "mysql_result()" pentru a verifica daca exista randuri returnate de instructiunea Select (are si "num_cols").

Cod: Selectaţi tot

return ($conn->num_rows > 0) ? true : false;

CristianAlexandru17 Mesaje:13
Ce-ai vrut sa spui prin "filtrare daca datele sunt transmise separat"?

MarPlo Mesaje:4343
Ma voi referi ca exemplu la Clasa PDO_MySQLi, pe care o si folosesc in proiecte, e mai simplu; dar metoda e similara si la prepare() - execute().
Daca se adauga valoarea /variabila direct in sirul SQL, asa:

Cod: Selectaţi tot

// SELECT simplu, cu variabila in comanda sql
$sql = "SELECT * FROM `testclass` WHERE `nume` = $nume";

// executa interogarea SQL (transmite doar sirul SQL), si obtine randurile selectate
$rows = $conn->sqlExecute($sql);
Valoare $nume nu e filtrata.
Dar daca in sirul SQL se adauga indice pt valoare, iar variabila e transmisa separat intr-un array, acea valoare e filtrata de functia execute() (care e in clasa, dar si in PDO).

Cod: Selectaţi tot

// SELECT simplu, cu indice inlocuitor in comanda sql
$sql = "SELECT * FROM `testclass` WHERE `nume` = :nume";
$vals = array('nume'=>$nume);        // sau: array('nume'=>'valoare');

// executa interogarea SQL (trimitand sirul SQL si array-ul cu valorea), si obtine randurile selectate
$rows = $conn->sqlExecute($sql, $vals);
- Mai multe detalii se gasesc in exemplele din pagina cu clasa, sau in lectiile despre PDO de pe site, ori la php.net , cautand "php prepare()" sau "execute()".