TheClown Skrevet 3. januar 2008 Skrevet 3. januar 2008 Heisann. Jeg skulle gjerne fått opp på siden min hvor mange queries som er executed. Slik som på denne siden: Klikky (nederst til høyre). Hvilke mysql kode gjør det?
Manfred Skrevet 3. januar 2008 Skrevet 3. januar 2008 Hvor mange queries som er executed? Norsk eller engelsk man skriver her? Uansett finnes det vel ikke en kjemperask måte å gjøre dette på, med mindre du mekker en egen funksjon eller lignende som alle spørringer kjøres gjennom og som teller.
BigJackW Skrevet 4. januar 2008 Skrevet 4. januar 2008 http://dev.mysql.com/doc/refman/5.0/en/query-log.html
Alex Moran Skrevet 5. januar 2008 Skrevet 5. januar 2008 (endret) Tipper den sida bruker PHP til å telle antall spørringer. Nå vet ikke jeg hvilket språk du bruker, men i php kan du gjøre slik: class Database { public $queries = 0; public function query($sql) { $this->queries++; return mysql_query($sql); } } $db = new Database(); $db->query("SELECT * FROM table"); // Printe antall spørringer. print $db->queries; Så kaller du query metoden istedenfor mysql_query. Endret 5. januar 2008 av hans3k
TheClown Skrevet 5. januar 2008 Forfatter Skrevet 5. januar 2008 Bruker også php men jeg skjønner ikke hva de siste 3 linjene gjør..
hockey500 Skrevet 5. januar 2008 Skrevet 5. januar 2008 (endret) les litt om OOP, her er et sammendrag av de tre linjene: 1: instansierer klassen Database() 2: kaller metoden query med sql-spørringen som parameter 3: printer ut innholdet i variabelen $queries. Uansett er den klassen ubrukelig hvis du er interessert i resultatet av spørringen (den kan selvsagt bygges ut til å returnere resource fra mysql_query), og jeg ville også sagt at det var dårlig design å lage queries som en public variabel. Jeg ville heller satt den som private og laget metoden GetQueryCount(). Endret 5. januar 2008 av hockey500
luxus Skrevet 13. januar 2008 Skrevet 13. januar 2008 class Database { public $queries = 0; public function query($sql) { $this->queries++; return mysql_query($sql); } } .. Hvis man først skal gjøre dette, kan man liksågjerne gjøre det ordentlig (mer objekt orientert that is) :-) Mitt forslag, som jeg rabla ned nå og som på ingen måte er testkjørt :-) /** * DB er klassen som spørringer nå kjøres igjennom * * Denne klassen utvider MySQLi klassen, som er den vi vanligvis ville * brukt til å kjøre spørringer igjennom. * * For de som ikke helt er med på dette vil det si at klassen * DB nå inneholder alt MySQLi gjør, men at vi også har mulighet * til å utvide og overskrive (med mindre de er deklarert 'final') * funksjoner i MySQLi objektet. * * De statiske funksjonene + funksjonene som jobber opp i mot $queries er eksempler * på utvidelse. query-funksjonen er eksempel på å overskrive MySQLi sin funksjon * Vi kan fortsatt bruke MySLQi sin query funksjon via parent:: */ class DB extends MySQLi { // Her lagres alle spørringene private $queries = Array(); /** * Privat konstruktør, instansieres via static functions. * Dette gjør det relativt oversiktlig og enkelt å gjøre om * på hvordan oppkobling til DB gjøres * * @return DB DB objekt */ private function __construct($host, $brukernavn, $passord, $schema) { $this->connect($host, $brukernavn, $passord, $schema); // Kaller på superklassens funksjon.. } public static function connectTilDB1() { return new DB("db1.sql.no", "1", "abc", "db1"); } public static function connectTilDB2() { return new DB("db2.sql.no", "2", "qwe", "db2"); } /** * Alle sprringer blir kjørt igjennom denne, som igjen kaller på * sin superklasses query funksjon, altså MySQLi. * * @param String $query Spørringen * @param boolean $logQuery Skal spørringen logges? * @access public * @return void */ public function query($query, $logQuery = true) { if ( $logQuery ) { /** * Her kunne vi jo fint også logget tidspunkt, minnebruk etc, * så istedenfor å bare logge spørringen, puttet inn en array med * mer info isteden :-) */ $this->queries[] = $query; } return parent::query($query); } public function getAntallQueries() { return count($this->queries); } public function getQueries() { return $this->queries; } /** * Henter ut en bestemt Query * * @param int $qnr Query nr * @return String | false Spørringen eller false hvis query nummer ikke fantes */ public function getQueryNummer($qnr) { if ( ! is_numeric($qnr) ) { throw new Exception("Query nummer ($qnr) må være et tall!"); } $query = false; if ( array_key_exists($qnr, $this->getQueries()) ) { $query = $this->queries[$qnr]; } return $query; } } /** * Eksempel på bruk: */ $db = DB::connectTilDB1(); $query = <<<EOSQL SELECT h.id, h.felt1, h.felt2, h.felt3, e.felt1, e.felt2 FROM hovedtabell AS h LEFT JOIN enAnnenTabell AS e USING(id) WHERE id = 1 EOSQL; if ( $resultat = $db->query($query) ) { /** * Query funksjonen som ble deklarert over er den som blir kjørt, spørringen blir logget, * og vi får resultatet vårt i fra MySQLi objektet som vanlig.. */ if ( $rad = $resultat->fetch_assoc() ) { // Gjør ting og tang her :-) } }
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå