Jump to content
php.lv forumi

Recommended Posts

ak jēl, šitādu klasi uztaisīt ir 5 min

 

/*abstract*/ class DB {
function query();
function error();
function affected_rows();
function result_rows();
function sql_add_limit($sql);
function ...();
function ...();
}

 

tālāk ekstendējam.. var uzreiz teikt, ka ja gribēsi Oraklim rakstīt, tad dažas lietas vispār mainīsies... un netiek atbalstītas...

 

katrā ziņā, vispirms ir jānodala, kādas DB suportēs, un tad jāizveido `kaut kas pa vidu`... lai vēlāk nav SQL jāpparaksta iekš aplikācijas..

 

Bet, vislabāk arī ir taisīt SQLBuilderi, un tās jau klases izmantos native PHP moduļu f-jas, lai caur N-wraperiem nav jālien..

 

tipa

 

$ds1 = $queryObj->addDatasource('tableName');
$ds2 = $ds1->addDatasource('OtherTableName'); /* parent */
$ds2->addLink( 'pCatId', 'catid' ); /* this_field, parent_field */

Link to post
Share on other sites

PDO neļauj man veidot SQL... SQL man pašam jāuzraksta... jo SQL/etc katram DB atšķirās... tas pats LIMIT - pgsql, mysql, oracle... nav viņiem vienādi.. pat nerunājot par oracle hack-triku (select *, rowid from (select...) )

 

Protams tas viss attiecās uz universāliem skriptiem/aplikācijām, kuru var uzstutēt uz jebkādas minētās DB... bet ja klients ir pieprasījis konkrētā `zvēra` izmantošanu, tad nu tur jau var tāpātās ar native f-jām...

Link to post
Share on other sites

nu vispaar jau jaapsver jeega veidot taadu universaalu risinaajumu.

jo kas der visam, neder nekam.

shaa vai taa, ja mainaas dbvs, tad manupraat jaamaina aplikaacijas struktuura, jo katrai dbvs savi knifi

Link to post
Share on other sites
2.) ja domā izmantot konkrētu DB, šadai klasei - 0(nulle) jēga

Kā savādāk automatizēt tādas darbības, kā, piemēram, nevēlamo simbolu filtrēšanu?

Link to post
Share on other sites

function plaintxtForDb()

{

...

}

 

function htmlForDb()

{

...

}

 

... bet nu ne jau veselu klasi jāraksta.. ja vēlies, tad vari arī vienā klasē apvienot ;) kā kuram garšo..

Link to post
Share on other sites
kā kuram garšo..

Ļoti pareizi. Man tomēr labāk patīk lietot klasi, kuras funkcijās šīs darbības notiek automatizēti, daļēji konstruējot SQL, daļēji - nē, utml.

Link to post
Share on other sites
  • 3 months later...

Nezinu vai vēl vajag, bet man te viena, nē pareizāk sakot divas klasītes mētājas. To samērā viegli pārtaisīt arī uz citu DB.

RaDB - konekcijas iterface uz DB

RaQuery - SQL interface;

class RaDB {
 var $ID;
 function connect($db_path, $s_user,$s_password, $dbname) {

$this->ID = @mysql_connect($db_path, $s_user, $s_password);

if ($this->ID) {
  @mysql_select_db($dbname);
  return $this->ID;
} else {
  echo mysql_error();
  return 0;
}
 }

 function close() {
$result = @mysql_close($this->ID);
return $result;
 }

}

class RaQuery {
 var $result;
 var $row;
 var $SQL;
 var $trans;
 var $rowname;

 function query($sql="",$db = "") {
global $DB;
  if ($db == "") $db = $DB;
if ($sql != "") $this->SQL = $sql;

  $this->result = @mysql_query($this->SQL );

  if (!$this->result) {
		echo mysql_error();
	}
  return $this->result;

 }

 function execsql($db = "") {
global $DB;
  if ($db == "") $db = $DB;

  $this->result = @mysql_query($this->trans );

  if (!$this->result) {
		echo mysql_error();
	}
  return $this->result;
 }

 function getrow() {
$this->row = @mysql_fetch_array($this->result, MYSQL_ASSOC);
return $this->row;
 }

}

//Izmantošana

 $DB->connect("www.somthing.lv", "username", "passvord" , "database");
 if ($DB->ID == 0)
exit("Bljins, nekas nesanaak");
 $q = new RaQuery();

 $q->query("select name from users");

 while ($q->getrow()) {
  echo $q->row["name"];
 }

 $newname = "maita";
 $q->SQL = "update users set name = '$newname' where id = 1"; 
 $q->query();

Link to post
Share on other sites

reusojamā klasē rakstīt iekšā echo mysql_error(); nav smuki, jo tām ir jāstrādā bez jebkādu kļūdu rādīšanas - visas kļūdas jāliek kādā properijā,masīvā,vai log failos, bet ja lietojot tiešām gribēs parādīt kopā ar htmlu arī erroru, tad lai prasa un rāda ar echo $instance -> gimmeLastError();

Link to post
Share on other sites
×
×
  • Create New...