Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Deparazitare externa pisici fara ...

Seriale turcesti/coreene online H...

Merita un Termostat Smart pentru ...

Sfat achizitie MTB Devron Riddle
 Problema mare cu parintii= nervi ...

switch microtik

Permis categoria B la 17 ani

Sfaturi pentru pregatirea de eval...
 Crapaturi placa

cum imi accesez dosarul electroni...

Momentul Aprilie 1964

Sursa noua - zgomot ?
 A fost lansat Ubuntu 24.04 LTS

Pareri apartament in zona Berceni?

Free streaming SkyShowtime de la ...

Skoda Fabia 1.0 TSI (110 CP)- 19 ...
 

[CODE REVIEW] PDO Prepared Statements

- - - - -
  • Please log in to reply
5 replies to this topic

#1
sftpdt

sftpdt

    Senior Member

  • Grup: Senior Members
  • Posts: 3,665
  • Înscris: 29.08.2013
Salut.

Până acum foloseam pentru interogări sintaxe gen

$query = $this->DB->prepare('INSERT INTO `tabel` ( `nume`, `prenume`, `varsta` ) VALUES ( ?, ?, ? ) ');
$query->bindValue(1, 'Lefter');
$query->bindValue(2, 'George');
$query->bindValue(3, 22);
$query->execute();


Însă am văzut scripturi care foloseau diverse funcţii pentru diverse tipuri de interogări (insert, update, delete, select, etc), şi am zis să fac şi eu să văd ce-mi iese (mai ales că sunt începător în PHP).

Ce am făcut pentru INSERT arată cam aşa:

public function insert ( $tableName, $values )
{
	if ( empty ( $tableName ) or !is_array ( $values ) )
	{
		die ("PDO Error on insert");
	}
	else
	{
		$HTML = "";
		$preparedQuery = "INSERT INTO `$tableName` ( ";
		$valuesName = "";
		$valuesContent = "";
		foreach ( $values as $name => $content )
		{
			$valuesName .= "`{$name}`, ";
			$valuesContent .= ":{$name} , ";
		}
		$valuesName = substr( $valuesName, 0, -2 ) . " ";
		$valuesContent = substr( $valuesContent, 0, -2 ) . " ";
		$preparedQuery .= $valuesName . " ) VALUES ( " . $valuesContent . ")";
		$query = $this->connection->prepare( $preparedQuery );
		$HTML .= $preparedQuery . "<br>";
		foreach ( $values as $name => $content )
		{
			$query->bindValue( ":{$name}", "{$content}" );
		}
	   
		$query->execute();
	}
}




Funcţia am testat-o cu ceva mai simplu:

$this->DB->insert( 'members', array(
			 'name' => 'sftpdt',
			 'password' => '12dsudhedfefe',
			 'email' => '[email protected]',
			 'member_group_id' => 3,
			 'joined' => 16854521521,
			 'ip' => '192.168.1.1',
			 'pass_hash' => 'qwasdftyyui'
			 ));


Şi văd că îşi face treaba Posted Image. Poate fi îmbunătăţit codul? Până diseară sper să termin şi celelalte.

Edited by sftpdt, 31 January 2015 - 11:42.


#2
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,238
  • Înscris: 24.02.2007
Mai repede as cauta sa abstractizez accesul la date de restul aplicatiei. Creezi un repository cu diveerse functii gen getArticles(), saveArticle() si doar in interiorul lui ai treaba cu db-ul. Restul aplicatiei nici nu stie unde se duc datele/de unde provin, stie doar ca ai clase care le modeleaza (Article) si un repository care stie ce sa faca cu ele.

Daca vrei sa abstractizezi mai mult accesul la db, foloseste un ORM.

#3
Ruben56

Ruben56

    Senior Member

  • Grup: Senior Members
  • Posts: 2,822
  • Înscris: 05.12.2013
De ce ai face o metoda pentru fiecare ? De ce sa nu faci una pentru toate?
Exemplu: http://pastebin.com/93MjA40z
O folosesti foarte usor, exemplu: Database::query('INSERT....', array($parametru1, $parametru2, $parametruX));

Edited by Ruben56, 31 January 2015 - 14:55.


#4
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,442
  • Înscris: 10.08.2005
de vreme ce ai acess la toate, risti sa expui baza de date

#5
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,238
  • Înscris: 24.02.2007

View PostRuben56, on 31 ianuarie 2015 - 14:54, said:

De ce ai face o metoda pentru fiecare ? De ce sa nu faci una pentru toate?

Fiindca legi prea mult logica aplicatiei de baza de date.
Daca vrei sa treci pe un no-sql, de exemplu, modifici apoi de-ti vine rau.

#6
sftpdt

sftpdt

    Senior Member

  • Grup: Senior Members
  • Posts: 3,665
  • Înscris: 29.08.2013
Am mai facut update si delete.

Spoiler


Anunturi

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate