Jump to content
php.lv forumi

Class mysql_connect!


thesnarkie

Recommended Posts

<?
class adminTool {

private $db = array();

public function __construct() {
	$this->db["db_username"] = "x";
	$this->db["database"] = "x";
	$this->db["db_password"] = "x";
	$this->db["hostname"] = "x";
	$this->db["connected"] = false;
	$this->db["result"] = "";
}
private function open() {
	if($this->db["connected"] != true) {
	    $this->db["connection"] = @mysql_connect($this->db["hostname"], $this->db["db_username"], $this->db["db_password"]);
		mysql_select_db($this->db["database"]);
	    $this->db["connected"] = true;
	}
}
public function run($sql) {
	if(!empty($sql)) {
		if($this->db["connected"] != true) {
			$this->open();
		}
	    $this->db["result"] = @mysql_query($sql);
		return $this->db["result"];
		mysql_free_result($this->db["result"]);
		if($this->db["connected"] != false) {
			$this->close();
		}
	}else{
		return false;
	}
}
public function fetch($result) {
	if(!empty($result)) {
		$this->db["result"] = mysql_fetch_assoc($result);
		return $this->db["result"];
		mysql_free_result($this->db["result"]);
	}else {
		return false;
	}
}
private function close() {
    if($this->db["connected"] != false) {
	    mysql_close($this->db["connection"]);
	    $this->db["connected"] = false;
	}
}
}

$me = new adminTool();
$result = $me->run("SELECT * FROM account AS a ORDER BY a.id DESC LIMIT 0, 100");
while($row = mysql_fetch_assoc($result)) echo $row["username"] ." => ".$row["password"] ."<br />";
?>

 

Domāju iemācīties kā rīkoties ar class lietām. Vai augstāk dotais kods ir gana labs, lai savienotos ar datubāzi un palaistu query? Un vispār vai augstāk dotais ir ātrāks, drošāks vai jeb kā citādāk labaks kā šis zemāk? Kāda vispār atšķirība? Ko augstāk dotajā kodā varētu uzlabot?

 

<?
$db_username = "x";
$database = "x"; 
$db_password = "x"; 
$hostname = "x";
$db = mysql_connect($hostname, $db_username, $db_password); 
mysql_select_db($database);

$run = mysql_query("SELECT * FROM account AS a ORDER BY a.id DESC LIMIT 0, 100");
while($row = mysql_fetch_assoc($run)) {
echo $row["username"] ." => ".$row["password"] ."<br />";
}
mysql_free_result($run);
?>

Edited by thesnarkie
Link to comment
Share on other sites

ja vienkārši raksta, tad ja nemaldos funkcijas bija static,. bet publiski tas ir tā, ka pirms klases itkā inicializēšanas tu jau vari palaist funkcijas ārpus klases.. ..

a statiskās un protected, tikai klases ietvaros. Palabojiet ja kļūdos.

Link to comment
Share on other sites

figviņzin, kas ja neraksta.

 

Bet ja raksta public, tad metodei/mainīgajam ir pieejams "no visurienes" :D

Ja metode/mainīgais ir private, tad metodei/mainīgajam var piekļūt tikai pati klase.

Ja metode/mainīgais ir protected, tad metodei/mainīgajam var piekļūt pati klase un klase, kas to manto.

 

Static vispār nozīmē, ka tas visos klases instancēs būs vienāds. Piemēram, statisks mainīgais visās klases instancēs vienmēr būs vienāds (pamainīsi vienā instancē, citā tās pašas klases instancē arī pamainīsies)

Edited by briedis
Link to comment
Share on other sites

2easy, paskaidro Tu! :)

piekrītu briedim ^^

 

hmm, tomēr mazliet nepiekrītu. statiskās metodes izsauc uzreiz pašai klasei, nevis instancei ;)

 

 

labi, nav ko daudz pīpēt, vajag uzrakstīt

class C {
static function testStatic() {echo 'static<br />';}
function test() {echo 'test<br />';}
public function testPublic() {echo 'public<br />';}
private function testPrivate() {echo 'private<br />';}
protected function testProtected() {echo 'protected<br />';}
}

C::testStatic();  // static
C::test();  // test (imho, normālā oop šim vajadzēja fail)
C::testPublic();  // public (imho, normālā oop šim vajadzēja fail)

$o = new C();
$o->testStatic();  // static (imho, normālā oop šim vajadzēja fail)
$o->test();  // test
$o->testPublic();  // public
$o->testPrivate();  // Fatal error: Call to private method C::testPrivate()
$o->testProtected();  // Fatal error: Call to protected method C::testProtected()

kr4 tgd skaidri ir redzams, ka metode "bez nekā" nozīmē to pašu ko public. un jā, php tomēr atļauj statiskās metodes izsaukt arī instancei.

UPDATE: hmm, mazliet papildinot testu, atklājās ka arī test() un testPublic() var izsaukt kā statiskās metodes!!! tb php ir pārāk elastīgs/vaļīgs attiecībā uz oop. tad jau man būtu jāsaka nevis "tomēr mazliet nepiekrītu briedim", bet gan "tomēr mazliet nepiekrītu php oop implementācijai", par to ka atļauj par daudz! :D

 

vsp daGrevis vajag lasīt manuāli. tur viss ir uzrakstīts ;)

Methods without any declaration are defined as public.
Edited by 2easy
Link to comment
Share on other sites

attiecībā uz pašu db konektoru, nju Jūs gan protat sarežģīt vnkāršas lietas. visu to pašu var izdarīt ar daudz mazāku procedurālu kodu. piemēram, šeit php.lv piemērus bliežu ar šādām funkcijām

function dbconn($sSrv, $sDb, $sUsr, $sPw) {  // inicializē mysql connection
@mysql_connect($sSrv, $sUsr, $sPw) or exit('<b>mysql_connect() error ' . mysql_errno() . ':</b> ' . mysql_error());
mysql_select_db($sDb) or exit('<b>mysql_select_db() error ' . mysql_errno() . ':</b> ' . mysql_error());
go('SET NAMES utf8');
}
function go($sSql) {  // izpilda mysql query
$h = mysql_query($sSql) or exit('<b>mysql_query() error ' . mysql_errno() . ':</b> ' . mysql_error() . '<br /><b>query:</b> ' . substr($sSql, 0, 1000));
return $h;
}
function qi($i) {return is_null($i) ? 'NULL' : preg_replace('/[^\d-]/', '', $i);}  // query int64 - sagatavo lielu veselu skaitli (int64) ievietošanai mysql query
function qn($n) {return is_null($n) ? 'NULL' : (float) $n;}  // query num - sagatavo skaitli (int/float) ievietošanai mysql query
function qs($s) {return is_null($s) ? 'NULL' : "'" . mysql_real_escape_string($s) . "'";}  // query str - sagatavo tekstu (any string) ievietošanai mysql query

un nekādu problēmu

http://php.lv/f/topic/15731-mysql-kverijs/page__view__findpost__p__121717

http://php.lv/f/topic/15781-mysql-vaicajums/page__view__findpost__p__122190

 

tas ka prot oop, tas ir labi, bet tas jau nenozīmē, ka tūlīt viss ir jākodē ar oop

nē, nu tā, protams, var darīt, ja patīk :)) gaumes lieta kā nekā. taču procedurāli ir ātrāk ;)

 

kr4, vispirms use brain, then oop

Edited by 2easy
Link to comment
Share on other sites

no MySQLi Overview

APIs can be procedural or object-oriented. With a procedural API you call functions to carry out tasks, with the object-oriented API you instantiate classes and then call methods on the resulting objects. Of the two the latter is usually the preferred interface, as it is more modern and leads to better organised code.

visvairāk man patīk spēcīgais pamatojums: tipa modernāks :D:D:D

par koda organizēšanu vēl ok, lai gan tas ir stipri atkarīgs no paša programmētāja, jo klases/objektus arī var tā saorganizēt, ka maz neliksies :P

 

bezmaz nākas secināt, ka oop ir priekš iesācējiem, lai palīdzētu viņiem organizēt kodu!!! yeee :D:D:D

kr4 priekš tiem, kam ar to ir grūtības, uzliek visādus ierobežojumus jau pašā programmēšanas valodā un tādējādi piespiež kļūt organizētākiem. tāpēc jau notiek visa tā beztolka pašmenedžēšanās ar public/private/protected/etc, lai tikai kāds noobs "netīšām" nevarētu izdarīt kko ne tā :P

Edited by 2easy
Link to comment
Share on other sites

@rATRIJS - paldies. izmantošu obligāti! :)

vispār man ir vienalga vai tā ir modernāk vai nav. :D

man svarīgi ir lai kods būtu drošs un ātrs, tāpēc nolēmu pamēģināt klases. firebug'ā salīdzinot viena koda ātrumu ar otra ātrumu nekādas atšķirības nav. par drošību nezinu.

secinājums - izmantošu db klasi, lai būtu gana "moderns", bet tas arī viss no klasēm. laikam.

Edited by thesnarkie
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...