Autor Zpráva
gruh54
Profil *
Mam takuto funkciu na pripojenie k databaze:

function pripojenie()
{
	$mysqli = new mysqli(HOST, USER, PASSWORD, NAME); 
	
    if (!$mysqli )
		echo 'Chyba!';
	else
	{
		return $mysqli;
	}
}



Ked su vsetky udaje spravne, ok vsetko ide ale ako spravit to, ze ked je napr zle heslo tak jednoducho vypise ze Chyba a aby nevypisovala Fatal errory a podobne...
Poradite?

Dakujem moc krat.
ShiraNai7
Profil
použít zavináč před funkcí nebo dočasně vypnout error_reporting..?
gruh54
Profil *
to nechcem, tym sa skryju vypisy ale neodstrania sa.

Ja cchem aby vypisalo to moje:

if (!$mysqli )
		echo 'Chyba!';
ShiraNai7
Profil
A jakou chybu to píše?
srigi
Profil
Ja cchem aby vypisalo to moje

No vsak prave preto pouzi ten zavinac. Zablokujes std. chybove hlasenie na vystupe a vsetko si zariadis v tom IFe.
gruh54
Profil *
lenze ked dam zavinas tak nevypise nic.

vypisuje chybu mysqli ze je zle heslo ale ja chcem aby vypisalo to co ja chcem, len neviem ako.

Poradite?
suky
Profil
gruh54
Jenze timto zapisem ($mysqli = new mysqli(HOST, USER, PASSWORD, NAME);) vytvoris odkaz na objekt, tak je logicke, ze podminka nebude platit vzdy.
srigi
Profil
Jenze timto zapisem ($mysqli = new mysqli(HOST, USER, PASSWORD, NAME);) vytvoris odkaz na objekt

Co potom to dat do try/catch bloku? Vid tento moj post.
gruh54
Profil *
Fajn, len ako to teraz pretrasformovat to PDO na mysqli? Ako sa to urobi?

function pripojenie()
{
   try {  
      $mysqli = new mysqli(HOST, USER, PASSWORD, NAME); 
      return $mysqli;
   }
   catch (????)
   {
      echo 'Chyba!';
   }

}


Takto nejako?
joe
Profil
Co třeba takhle?
<?php

function pripojenie() {

  $mysqli = new mysqli(HOST, USER, PASSWORD, NAME); 
	
  if (mysqli_connect_errno()) {
    // nova vyjimka
    throw new Exception(mysqli_connect_error());
    return false;
  } else {
    // vrat pripojeni
    return $mysqli;  
  }

}

?>

Ale nevím, s mysqli jsem nikdy nedělal :-)
gruh54
Profil *
Nie, nefunguje to :((


Pise:

Warning: mysqli::mysqli() [function.mysqli-mysqli]: ....
Fatal error: Uncaught exception 'Exception' with message 'Access denied for user...


Vedeli by ste to niekto?
srigi
Profil
No jasne, tak ako pise joe, len to treba dopisat chybajuce casti.
try {  
  $db = pripojenie();

} catch (Exception $e) {
  // spracovanie chyby pripojenia k DB
  echo $e->getmessage();

}
gruh54
Profil *
A kam to mam dopisat? Pretoze mi to nefunguje stale :(
Mam:


Includnem funkciu
<?php

function pripojenie() {

  $mysqli = new mysqli(HOST, USER, PASSWORD, NAME); 
	
  if (mysqli_connect_errno()) {
    // nova vyjimka
    throw new Exception(mysqli_connect_error());
    return false;
  } else {
    // vrat pripojeni
    return $mysqli;  
  }

}

?>


a Potom v kazdom subore spustam:

try {  
  $db = pripojenie();

} catch (Exception $e) {
  // spracovanie chyby pripojenia k DB
  echo $e->getmessage();

}



Ale jednoducho stale vypisuje tie iste chyby ak su zle prihlasovacie udaje.

Poradite?
joe
Profil
Ale jednoducho stale vypisuje tie iste chyby ak su zle prihlasovacie udaje.
Kód je dobře, ale když ti to píše, že máš špatné údaje, tak je máš asi špatné:)

Ale asi by bylo lepší

<?php

function pripojenie() {
  try {
    $mysqli = new mysqli(HOST, USER, PASSWORD, NAME);
    return $mysqli;  
  } catch(Exception $e) {
    echo $e->getmessage()
  }
  return false;
}

?>


a všude pak psát jenom
$db = pripojenie();
nightfish
Profil
řešením je třeba vlastní error handler (viz níže) a nebo zakázat zobrazování varování (error_reporting(E_ALL & ~E_WARNING);)
function myErrorHandler($errno, $errstr, $errfile, $errline)
{
  switch ($errno) {
    case E_WARNING:
      // s warningy nedelej nic
      break;
    default:
      // tady si osetri ostatni mozne chyby
      break;
  }
}
set_error_handler("myErrorHandler");
gruh54
Profil *
Dakujem,


ale ja jednoducho chcem, v pripade ak je zle zadane heslo, tak aby nepisalo ziadne errory ale jednoducho aby vypisalo, ze 'Lutujeme, ale je chyba.'a nasledne cista stranka.


Da sa to?
joe
Profil
<?php

function pripojenie() {
try {
$mysqli = new mysqli(HOST, USER, PASSWORD, NAME);
return $mysqli;
} catch(Exception $e) {
//echo $e->getmessage();
echo "Lutujeme, ale je chyba.";
}
return false;
}

?>
gruh54
Profil *
Ale ono to nefuguje, naozaj...robito to iste...nevypise sa to...


Ako je to mozne?
srigi
Profil
Pouzi tento kod, vyskusany, funguje, pomocou switch si mozes customizovat error hlasky. Joe a ostatni, problem je, ze mysqli() nevyhadzuje vynimku typu Exception, preto som vzor try/catch zavrhol. Tu je ten slubovany kod:
function db_connect()
{
  @$mysqli = new mysqli('localhost', 'user', 'secret', 'test');

//echo mysqli_connect_errno()."<br>";  // for debug

  if (mysqli_connect_errno()) {
    switch (mysqli_connect_errno()) {
      case 1045:
        echo "unable to connect<br>";
        break;
      
      case 1049:
        echo "unknown database<br>";
        break;

      case 2005:
        echo "unknown db server<br>";
        break;
    }

    die;

  } else
    return $mysqli;

}

$db = db_connect();
gruh54
Profil *
Wow, je to super!

Dakujem Ti moc krat, velmi si mi pomohol a som rad, ze sme to nakoniec vyriesili.
Problem je uspesne vyrieseny, vdaka srigi.

Dakujem!
srigi
Profil
Vidis, uz na zaciatku som tvrdil, ze ten zavinac tam potrebujes.

BTW neni za co.

:D

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0