Pereiti prie turinio

Su viena užklausa įrašo du rezultatus..


Rekomenduojami pranešimai

Labas, susidūriau su tokia problema, kad kai vykdoma viena mysql užklausa, tiksliau insert, įrašo du įrašus vienodus, kai turėtų vieną. Ir nesuprantu kame problema. Kiek ieškojau, tai radau tik vieną priežastį, kad kelis kartus jungias prie db. Bet tas negali būti, tad priežastis kita. Gal kam yra tekę su tuo susidurti ar žinot kame bėda? Kodo nerašysiu, nes netilps paprasčiausiai visa klasė. Beto seniau viskas veikdavo normaliai.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kur kodas?

 

pastebin tam skirta

 

Sumažinau kodą iki minimumo.. Jau kelias dienas suku galvą, ir nesuprantu..

	class db
{

	private $db = null;

	private $prefix = 'wr_';	

	public function __construct ()
	{
	}		

	public function __destruct ()
	{
		# Disconnect
		if ( $this -> db != null )
			$this -> disconnect ();
	}		

	public function connect ( $host = null, $user = null, $pass = null, $database = null, $return = false )
	{
		# Already connected
		if ( $this -> db != null ) 
			return false;

		if ( $host == null ) $host = DB_HOST;
		if ( $user == null ) $user = DB_USER;
		if ( $pass == null ) $pass = DB_PASS;

		if ( defined ( 'DB_PREFIX' ) )
		{
			$this -> prefix = DB_PREFIX;	
		}

		error::toggle_silent ( true );
		$this -> db = mysqli_connect ( $host, $user, $pass );
		error::toggle_silent ( false );
		if ( $this -> db === false )
		{
			if ( $return == false )
			{
				switch ( mysqli_connect_errno () ) 
				{
					case 2002:
						throw new error ( 'Wrong server hostname!' );
						break;
					case 1045:
						throw new error ( 'Access denied! Wrong username or password.' );
						break;
					default:
						throw new error ( mysqli_connect_error () );
				}
			}
			else 
			{
				return false;	
			}
		}

		if ( $database == null ) $database = DB_NAME;
		$res = mysqli_select_db ( $this -> db, $database );
		if ( $res === false )
		{
			if ( $return == false )
			{
				throw new error ( 'Access denied! Wrong database name.' );	
			}
			else 
			{
				return false;	
			}
		}

		return true;
	}		

	public function disconnect ()
	{
		mysqli_close ( $this -> db );
	}		


	public function insert ( $qr )
	{
		$this -> connect ();

		mysqli_query ( $this -> db, $qr );
	}		


}

 

 

 

 

 

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Aš sakau, kodas geras 100%, išbandžiau su visom naršyklėm, pasirodo su firefox ir chrome veikia puikiai, o su Opera grybauja, IE irgi grybauja.. Tai kas čia per problema?

 

Kad lengviau įsivaizduotumėt, pavyzdį duosiu: aš sesijas įrašinėju į mysql, tai su ff ar chrome atėjus, susikuria nauja sesija ir įrašo į mysql, perkrovus puslapį atnaujina sesijos laiką. Su opera gaunasi, atėjus iškart sukuria dvi sesijas ir abi įrašo, perkrovus puslapį, kai turėtų atnaujinti esamą sesiją, sukuria naują, ir atnaujiną prieš tai buvusią, su IE tas pats, kas ir su opera. Tai gaunasi, kad naršyklė nejau refrešinasi vienu kart du kartus? Mistika kažkokia. :D

 

 

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Aš sakau, kodas geras 100%, išbandžiau su visom naršyklėm, pasirodo su firefox ir chrome veikia puikiai, o su Opera grybauja, IE irgi grybauja.. Tai kas čia per problema?

 

Kad lengviau įsivaizduotumėt, pavyzdį duosiu: aš sesijas įrašinėju į mysql, tai su ff ar chrome atėjus, susikuria nauja sesija ir įrašo į mysql, perkrovus puslapį atnaujina sesijos laiką. Su opera gaunasi, atėjus iškart sukuria dvi sesijas ir abi įrašo, perkrovus puslapį, kai turėtų atnaujinti esamą sesiją, sukuria naują, ir atnaujiną prieš tai buvusią, su IE tas pats, kas ir su opera. Tai gaunasi, kad naršyklė nejau refrešinasi vienu kart du kartus? Mistika kažkokia. :D

 

Pateikei klase, kuri gal ir gerai veikia, bet klausimas, kaip tu ja panaudoji? Nes to kodo dalies nera...

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pateikei klase, kuri gal ir gerai veikia, bet klausimas, kaip tu ja panaudoji? Nes to kodo dalies nera...

Ir daugiau jokio kodo nėra, nei html nei dar ko.

<?php

$db         = & core::load_file ( 'db' ); //čia iškviečiama klasė

$db -> insert ( "INSERT INTO table SET aa='bbb'" );

?>

 

 

 

Nuoroda į pranešimą
Dalintis kituose puslapiuose

function backtrace() {
   $backtrace = debug_backtrace();

   $output = '';
   foreach ($backtrace as $bt) {
       $args = '';
       foreach ($bt['args'] as $a) {
               if (!empty($args)) {
                       $args .= ', ';
               }
               switch (gettype($a)) {
                       case 'integer':
                       case 'double':
                               $args .= $a;
                               break;
                       case 'string':
                               //$a = htmlspecialchars(substr(, 0, 64)).((strlen($a) > 64) ? '...' : '');
                               $args .= "\"$a\"";
                               break;
                       case 'array':
                               $args .= 'Array('.count($a).')';
                               break;
                       case 'object':
                               $args .= 'Object('.get_class($a).')';
                               break;
                       case 'resource':
                               $args .= 'Resource('.strstr($a, '#').')';
                               break;
                       case 'boolean':
                               $args .= $a ? 'TRUE' : 'FALSE';
                               break;
                       case 'NULL':
                               $args .= 'Null';
                               break;
                       default:
                               $args .= 'Unknown';
               }
       }
       $output .= '<br />';
       $output .= '<b>file:</b> '.@$bt['file'].' - line '.@$bt['line'].'<br />';
       $output .= '<b>call:</b> '.@$bt['class'].@$bt['type'].@$bt['function'].'('.$args.')<br />';
   }
   return $output;
}

 

Parašai echo backtrace(); kur darai insertą ir žiūrai kur iškviečia tą funkciją

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Parašai echo backtrace(); kur darai insertą ir žiūrai kur iškviečia tą funkciją

Array
(
   [0] => Array
       (
           [file] => /home/****/domains/****/public_html/functions/db.php
           [line] => 279
           [function] => backtrace
           [class] => db
           [object] => db Object
               (
                   [db:db:private] => mysqli Object
                       (
                           [affected_rows] => 1
                           [client_info] => mysqlnd 5.0.10 - 20111026 - $Id: b0b3b15c693b7f6aeb3aa66b646fee339f175e39 $
                           [client_version] => 50010
                           [connect_errno] => 0
                           [connect_error] => 
                           [errno] => 0
                           [error] => 
                           [error_list] => Array
                               (
                               )

                           [field_count] => 0
                           [host_info] => Localhost via UNIX socket
                           [info] => 
                           [insert_id] => 66
                           [server_info] => 5.5.28-log
                           [server_version] => 50528
                           [stat] => Uptime: 405723  Threads: 1  Questions: 3683670  Slow queries: 0  Opens: 41734  Flush tables: 1  Open tables: 5186  Queries per second avg: 9.079
                           [sqlstate] => 00000
                           [protocol_version] => 10
                           [thread_id] => 220457
                           [warning_count] => 2
                       )

                   [res:db:private] => 1
                   [query_count:db:private] => 3
                   [query_time:db:private] => 0.00061488151550293
                   [prefix:db:private] => mgsc_
               )

           [type] => ->
           [args] => Array
               (
               )

       )

   [1] => Array
       (
           [file] => /home/****/domains/****/public_html/templates/mobile_default/default.tpl.php
           [line] => 12
           [function] => insert
           [class] => db
           [object] => db Object
               (
                   [db:db:private] => mysqli Object
                       (
                           [affected_rows] => -1
                           [client_info] => mysqlnd 5.0.10 - 20111026 - $Id: b0b3b15c693b7f6aeb3aa66b646fee339f175e39 $
                           [client_version] => 50010
                           [connect_errno] => 0
                           [connect_error] => 
                           [errno] => 0
                           [error] => 
                           [error_list] => Array
                               (
                               )

                           [field_count] => 0
                           [host_info] => Localhost via UNIX socket
                           [info] => 
                           [insert_id] => 66
                           [server_info] => 5.5.28-log
                           [server_version] => 50528
                           [stat] => Uptime: 405723  Threads: 1  Questions: 3683670  Slow queries: 0  Opens: 41734  Flush tables: 1  Open tables: 5186  Queries per second avg: 9.079
                           [sqlstate] => 00000
                           [protocol_version] => 10
                           [thread_id] => 220457
                           [warning_count] => 2
                       )

                   [res:db:private] => 1
                   [query_count:db:private] => 3
                   [query_time:db:private] => 0.00061488151550293
                   [prefix:db:private] => mgsc_
               )

           [type] => ->
           [args] => Array
               (
                   [0] => INSERT INTO aaa SET vardas='bandom'
               )

       )

   [2] => Array
       (
           [file] => /home/****/domains/****/public_html/exec.php
           [line] => 126
           [args] => Array
               (
                   [0] => /home/****/domains/****/public_html/templates/mobile_default/default.tpl.php
               )

           [function] => require_once
       )

   [3] => Array
       (
           [file] => /home/****/domains/****/public_html/index.php
           [line] => 92
           [args] => Array
               (
                   [0] => /home/****/domains/****/public_html/exec.php
               )

           [function] => require_once
       )

)

[query_count:db:private] => 3 - atliekami trys queriai, vienas nustato utf-8 koduotę, antras įrašo sesiją, trečias mano insert... Kaip ir viskas gerai, bet vistiek dubliuoja įrašus.. :angry:

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Peržiūrėjau logus. Tai radau:

 

 [18/Dec/2012:05:58:13 +0200] "GET / HTTP/1.1" 200 225 "-" "Opera/9.80 (Windows NT 6.1; Win64; x64) Presto/2.12.388 Version/12.11"
[18/Dec/2012:05:58:13 +0200] "GET /favicon.ico HTTP/1.1" 200 243 "http://xxx.lt/" "Opera/9.80 (Windows NT 6.1; Win64; x64) Presto/2.12.388 Version/12.11"

 

Tą pačią akimirkq naršyklė kreipiasi du kartus, ir kažko nori iš to favicono. O pas mane kaip jo ir nėra. Išbandžiau su telefono mozilla ir opera, viskas veikia nepriekaištingai. B-) Ryt pabandysiu įdėti faviconą ir žiūrėti ar ir su opera veiks, tikėkimės čia problema, nors pirmą kart tokią nesąmonę matau. :)

Redagavo MuniGod
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

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

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...