Bei Abfrage prüfen, ob Datenbank erreichbar ist
Julchen
- php
0 Shadowcrow0 Julchen
0 Tom
Hallo liebe Leute,
ich muss per PHP eine SQL-Abfrage machen, bei der geprüft wird, ob ein bestimmter Eintrag in der Datenbanktabelle schon vorhanden ist. Wenn ja, wird eine bestimmte Aktion durchgeführt.
Bis jetzt habe ich das mit
if(mysql_num_rows($query)==0)
{
//Aktion!
}
gemacht.
Problem: Wenn die Datenbanktabelle kurzfristig aus irgendwelchen Gründen nicht erreichbar ist, z.B. weil der Server einen Ausfall hat, o.ä., dann wird die Aktion auch ausgeführt.
Wie kann ich also in den if-Befehl noch mit aufnehmen, dass eine weitere Bedingung ist, dass die Tabelle überhaupt da ist?
1000 Dank!
'ǝɯɐu$ ıɥ
Wie kann ich also in den if-Befehl noch mit aufnehmen, dass eine weitere Bedingung ist, dass die Tabelle überhaupt da ist?
if (mysqli_connect_errno()) {
die ('Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')');
}
http://de2.php.net/mysqli_connect_errno
jaja, die() ist keine fehlerbehandlung :-)
ssnɹƃ
ʍopɐɥs
mmhh.. die Fehlermeldung interessiert mich eigentlich gar nicht. Ich will nur, dass bei Nichterreichbarkeit die Aktion nicht ausgeführt wird. Wäre dann also
if(mysql_num_rows($query)==0 && mysqli_connect_error='')
{
//Aktion!
}
das Richtige?
'ǝɯɐu$ ıɥ
mmhh.. die Fehlermeldung interessiert mich eigentlich gar nicht. Ich will nur, dass bei Nichterreichbarkeit die Aktion nicht ausgeführt wird. Wäre dann also
if(mysql_num_rows($query)==0 && mysqli_connect_error='')
{
//Aktion!
}das Richtige?
if (mysqli_connect_errno()) {
die ();
} else (mysql_num_rows($query)==0)
{
//Aktion!
}
oder sowas (du willst ja nur prüfen ob die db erreichbar ist):
<?php
$link = @mysqli_connect('localhost', 'fake_user', 'my_password', 'my_db');
if (!$link) {
die(); // oder was anderes
} else (mysql_num_rows($query)==0)
{
//Aktion!
}
?>
ließ dir bitte verlinkte seiten durch...
ssnɹƃ
ʍopɐɥs
Hello,
ich muss per PHP eine SQL-Abfrage machen, bei der geprüft wird, ob ein bestimmter Eintrag in der Datenbanktabelle schon vorhanden ist. Wenn ja, wird eine bestimmte Aktion durchgeführt.
Bis jetzt habe ich das mit
if(mysql_num_rows($query)==0)
{
//Aktion!
}gemacht.
Und Du hast dann vermutlich als nächstes erst das Insert-Query abgesetzt?
Du hast also zwei zeitlich getrennte Queries mit einer Zeitlücke von Millionen Microsekunden dazwischen benutzt, um für vermeintliche Sicherheit zu sorgen?
Dann hast Du Dir sowieso ein TOCTOU-Problem gebaut:
http://en.wikipedia.org/wiki/Time-of-check-to-time-of-use
Du könntest das verhindern, indem Du bei de Statements bindest.
Entweder man macht eine geschlossene Transaktion daraus und wenn das DBMS das noch nicht kann, muss man die betroffenen Tabellen sperren, bis beide Queries gelaufen sind.
Besser wäre es allerdings, beides in einem Query abzuhandeln.
Vielleicht hilft Dir
http://dev.mysql.com/doc/refman/5.1/en/replace.html
dabei weiter.
Alternativ könnte man mit Key-Constraints arbeiten, also über das Entscheidungskriterum (das können auch mehrere Spalten sein) einen Unique Index legen.
Dann wäre ein Doppeleintrag nicht mehr möglich.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
