Curs Php-mysql

Cand se executa o interogare SELECT cu PDO, cu functiile prepare() - execute(), valorile coloanelor din setul de rezultate returnat de baza de date sunt de tip sir (string). Chiar daca coloanele din tabelul MySQL contin valori de tip numeric: integer (INT) [intregi], sau float (FLOAT /DECIMAL /DOUBLE) [cu virgula], valorile din setul de rezultate returnat de PDO sunt de tip sir (intre ghilimele).
- Urmatorul exemplu arata tipul de date si valorile unei interogari SELECT cu PDO prepare() si execute().
<?php
// date de conectare (server_mysql, baza_date, nume_utilizator, parola)
$hostdb = 'localhost';
$namedb = 'tests';
$userdb = 'root';
$passdb = 'pass';

try {
  // Conectare si creare obiect PDO
  $conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
  $conn->exec("SET CHARACTER SET utf8");      // Seteaza encoding UTF-8

  // Defineste comanda SQL care va fi aplicata in prepare()
  $sql = "SELECT `id`, `name` FROM `users` WHERE `name`= :name LIMIT 1";
  $sqlprep = $conn->prepare($sql);        // Pregateste comanda SQL in $sqlprep

  $name = array('name'=>'admin');             // valoarea pt. ":name"
  // Daca comanda SQL este executata, retine rezultatul intr-o variabila
  if($sqlprep->execute($name)) {
    $row = $sqlprep->fetchAll(PDO::FETCH_ASSOC);
  }
}
catch(PDOException $e) {
  $row = $e->getMessage();
}

var_dump($row);          // arata valorile si tipul de date
?>
Functia var_dump() din acest cod va afisa un rezultat ca acesta:
array(1) { [0]=> array(2) { ["id"]=> string(1) "5" ["name"]=> string(5) "admin" } }
- Dupa cum se poate observa, valoarea coloanei "id" e returnata ca tip sir ("5"), dar in tabelul MySQL, coloana "id" este INT().

Aceasta conversie (din numar in sir) in setul de rezultate poate cauza probleme daca trebuie efectuate anumite instructiuni PHP in functie de valoarea exacta si tipul de date din "id" (cand egalitatea e verificata folosind trei semne egal "===").
Exemplu:
if($row[0]['id'] === 5) echo 'ID corect';
else echo 'ID-ul - '.$row[0]['id'].' nu este egal cu 5';
- Deoarece valoarea lui if($row[0]['id'] e "5" (ca tip sir), codul de mai sus va returna:
ID-ul - 5 nu este egal cu 5

Daca egalitatea este verificata folosind doua semne egal (==), va rezulta: ID corect , deoarece forma "==" verifica doar valoarea, nu si tipul de data.
Dar uneori e necesara verificarea cu "===", in special cand se verifica 0 in comparatie cu o valoare NULL sau vida.
In astfel de cazuri, solutia optima este ca numerele sa fie retinute in tip de data numeric.

• Iata cum se poate ca numerele din setul de rezultate obtinut cu PDO sa fie stocate /returnate cu tip numeric.
Urmatoarea functie (executeSQL()) primeste un obiect PDO ($conn) cu conexiunea la baza de date MySQL, si comanda SQL ($sql). Retine fiecare rand intr-un array. Foloseste instructiunea foreach() si functia is_numeric() ca sa verifice tipul valorii din fiecare coloana,daca e un numar (intreg, sau cu zecimale) adauga 0, ceea ce va transforma tipul sir in integer, sau float, fara sa modifice valoarea.
Aceasta functie va returna coloanele cu tipul de data corect.
<?php
// executa comanda SQL si returneaza setul de rezultate ( marplo.net )
function executeSQL($conn, $sql) {
  // pregateste si executa comanda din $sql
  try {
    $reout = array();
    $sqlprep = $conn->prepare($sql);

    if($sqlprep->execute()) {
      // daca fetch() returneaza cel putin un rand (nu e false), adauga randul in $reout
      if(($row = $sqlprep->fetch(PDO::FETCH_ASSOC)) !== false){
        do {
          // verifica fiecare coloana daca are valoare un numar, si o transforma in tip numeric
          foreach($row AS $k=>$v) {
            if(is_numeric($v)) $row[$k] = $v + 0;
          }
          $reout[] = $row;
        }
        while($row = $sqlprep->fetch(PDO::FETCH_ASSOC));
      }
    } else {
      $eror = $conn->errorInfo();
      $reout[] = 'Error: '. $eror[2];
    }
  }
  catch(PDOException $e) {
    $reout[] = $e->getMessage();
  }

  return $reout;
}

// date de conectare (server_mysql, baza_date, nume_utilizator, parola)
$hostdb = 'localhost';
$namedb = 'tests';
$userdb = 'root';
$passdb = 'pass';

// Conectare si creare obiect PDO
try {
  $conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
  $conn->exec("SET CHARACTER SET utf8");      // Seteaza encoding UTF-8
}
catch(PDOException $e) {
  $row = $e->getMessage();
}
// defineste instructiunea Select, si apeleaza executeSQL() ca sa se obtina randurile selectate
$sql = "SELECT `id`, `name` FROM `users` WHERE `name`='admin' LIMIT 1";
$rows = executeSQL($conn, $sql);

var_dump($rows);              // arata valorile si tipul de date
?>
Rezulta:
array(1) { [0]=> array(2) { ["id"]=> int(5) ["name"]=> string(5) "admin" } }
- Dupa cum puteti observa, acum "id" e returnat ca numar intreg (5).

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Care tag defineste zona de click intr-o harta creata dintr-o imagine?
<map> <img> <area>
<img src="image.jpg" usemap="#map1">
<map name="map1">
  <area shape="rect" coords="9, 120, 56, 149" href="#">
  <area shape="rect" coords="100, 200, 156, 249" href="#">
</map>
Ce proprietate CSS indica ce sa se intample cand continutul unui element depaseste dimensiunile lui?
display overflow position
#id {
  overflow: auto;
}
Clic pe evenimentul care este declansat cand mouse-ul e deasupra unui obiect.
onclick onmouseover onmouseout
document.getElementById("id").onmouseover = function(){
  document.write("Sa ai Viata Buna");
}
Indicati variabila PHP ce contine datele adaugate in adresa URL, dupa caracterul "?".
$_SESSION $_GET $_POST
if(isset($_GET["id"])) {
  echo $_GET["id"];
}
Clic pe pronumele reflexiv care e potrivit in propozitia: "Marc is the boy ... won the prize".
who which whoever
Marc is the boy who won the prize.
- Marc e baiatul care a castigat premiul.
Clic pe pronumele reflexiv care e potrivit in propozitia: "Voy a ver al pintor de ... les hablé ayer".
que quien cuyo
Voy a ver al pintor de quien les hablé ayer.
- Ma duc sa vad pictorul despre care ti-am vorbit ieri.
Valori numerice Integer, Float din Select cu PDO

Last accessed pages

  1. Trecutul nedefinit 6 (249)
  2. Verbe regulate (8049)
  3. Articolul din limba engleza - The article (66420)
  4. Prepozitii - Prepositions (32810)
  5. Proverbe, expresii si zicatori (22120)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (619)
  2. Conditional IF in Limba Engleza - Fraze Conditionale (536)
  3. Gramatica limbii engleze - Prezentare Generala (439)
  4. Exercitii engleza - English Tests and exercises - Grammar (379)
  5. Coduri pt culori (362)