CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
29.01.2008, 21:05:23
|
Anfänger
|
|
Registriert seit: Jan 2008
Ort: plz58
Beiträge: 16
|
|
"try catch" selbst gebaut
hallo Forum,
ich hatte in Java eine Datenbankabfrage mit try-catch realisiert. Weil es kein try-catch in php gibt hab ich es selber versucht zu bauen.
Bei meinem Versuch bleibt meine Schleife aber beim ersten Durchlauf hängen. Ist auch irgendwie zu verstehen weil kein Datensatz gefunden wird beim ersten Durchlauf.
PHP-Code:
$host= "localhost";
$user= "root";
$pass= "geheim";
$dbname= "datenbank";
$table= "tabelle"; //Felder: dest
$desti = 49233154321;
$prefix = 20;
do{
$searchStr = substr($desti,0,$prefix);
$db = new mysqli($host, $user,$pass);
if (mysqli_connect_errno()) {
printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
exit();
}
$db->query("SELECT $table FROM $dbname WHERE 'dest'='$searchStr'");
$sql = $db;
if ($db->query($sql))
{return $sql;}
else{echo "noch kein Datensatz gefunden";}
$prefix -= 1;
}
while(mysqli_connect_errno() > 0);
$mysearchString = $sql;
im Browser bekomme ich einmal die Ausgabe "noch kein Datensatz gefunden"
weiss jemand eine bessere Lösung für mein Problem?
oder was mache ich falsch, was könnte sonst in die while(rein) ?
bin für jeden Vorschlag zu haben
beste Grüße von allapow
|
29.01.2008, 23:59:28
|
|
AW: "try catch" selbst gebaut
Wer mysqli hat, der hat auch in PHP try + catch!
Oder?
|
30.01.2008, 09:27:28
|
Senior Member
|
|
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
|
|
AW: "try catch" selbst gebaut
__________________
Wat der Bauer nich kennt, dit frisster nich.
|
30.01.2008, 09:29:44
|
SELFPHP Guru
|
|
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
|
|
AW: "try catch" selbst gebaut
|
30.01.2008, 16:20:26
|
Anfänger
|
|
Registriert seit: Jan 2008
Ort: plz58
Beiträge: 16
|
|
AW: "try catch" selbst gebaut
hey, Dank an euch. Ich hatte vorher google gefragt, aber da wusste es niemand so genau.
... und hier noch für Interessierte, das was ich wollte, wenn es funktioniert:
PHP-Code:
for($prefix = 20; $prefix > 0; $prefix--) {
$desti = 96233154321;
$searchStr = substr($desti,0,$prefix);
try {
if($conn = mysql_connect($host, $user,$pass)) {
mysql_select_db($dbname);
if($result = mysql_query("SELECT * FROM $table WHERE dest = '$searchStr'")) {
while ($row = mysql_fetch_object($result)) {
echo $row->dest;
}
} else {
echo "keine Vorwahl gefunden";
}
} else {
echo "keine Verbindung zur Datenbank\n";
}
} catch (Exception $e) {
echo "MySQL Fehler. \n";
echo "Error Meldung: ".$e->getMessage()."\n";
echo "Trace: ".$e->getTraceAsString()."\n";
}
}
|
30.01.2008, 16:26:56
|
|
AW: "try catch" selbst gebaut
evtl. solltest du dich besser mit PDO oder gar mit doctrine, propel+creole beschäftigen.
Ansonsten könnte ich dir hier auf Wunsch eine rudimentäre, aber funktionierende DBKlasse posten.
Die ist dann auch schon ein bisschen Javaähnlich(aber wirklich nur ein bisschen)
Geändert von rambi (30.01.2008 um 16:27:18 Uhr)
|
30.01.2008, 20:22:16
|
Anfänger
|
|
Registriert seit: Jan 2008
Ort: plz58
Beiträge: 16
|
|
AW: "try catch" selbst gebaut
auch danke für deine Tips, obwohl sich unsere Beiträge bestimmt überschnitten hatten.
Ich hab mir das mit PDO und doctrine kurz angesehen... ist für mein Vorhaben eher (noch) überproportioniert. Wenn ich das Programm weiter ausbaue werde ich mich bestimmt an deinen Tip erinnern.
Naja und an einer DBKlasse wäre ich natürlich interessiert. Was kann die denn?
Wer Interesse an dem Java Code hat, den gibt es auf meiner Seite (getestet und funzt). Sollte nen open Source simpleAsteriskCallshop werden aber mit PHP ist es besser.
|
30.01.2008, 20:29:06
|
|
AW: "try catch" selbst gebaut
Zitat:
obwohl sich unsere Beiträge bestimmt überschnitten hatten.
|
Nein
Wie schon gesagt, rudimentär, aber funktionsfähig!!
Das Interface: idb.php
PHP-Code:
interface Idb
{
public function __construct($dburl);
public function query($query);
public function fetch($res);
}
Eine mysql klasse: db_mysql.php
PHP-Code:
class db_mysql implements Idb
{
private $handle = FALSE;
public function __construct($dburl)
{
$path = parse_url($dburl);
$port = isset($path['port'])?':'.$path['port']:'';
$server = $path['host'].$port;
$this->handle = mysql_connect($server,$path['user'] ,$path['pass']);
if(FALSE === $this->handle) Throw new Exception(mysql_error());
$select = mysql_select_db(trim($path['path'],"/"),$this->handle);
if(FALSE === $select) Throw new Exception(mysql_error());
}
public function query($query)
{
$res = mysql_query($query,$this->handle);
if(FALSE === $res) Throw new Exception(mysql_error());
return $res;
}
public function fetch($res)
{
return mysql_fetch_assoc($res);
}
}
Eine sqlite Klasse: db_sqlite.php
PHP-Code:
class db_sqlite implements Idb
{
private $handle = FALSE;
public function __construct($dburl)
{
$path = parse_url($dburl);
$this->handle = sqlite_open(trim($path['path'],"/"));
if(FALSE === $this->handle) Throw new Exception('Can not open: '.$dburl);
}
public function query($query)
{
$res = sqlite_query($query,$this->handle);
if(sqlite_last_error($this->handle))
Throw new Exception(sqlite_error_string(sqlite_last_error($this->handle)));
return $res;
}
public function fetch($res)
{
return sqlite_fetch_array($res,SQLITE_ASSOC);
}
}
Die Faktory Klasse: db.php
PHP-Code:
class db
{
static public function factory($dburl)
{
$path = parse_url($dburl);
$type = 'db_'.$path['scheme'];
return new $type($dburl);
}
}
Der zugehörige Autoloader und ein kleines Testscript:
PHP-Code:
function __autoload($class_name)
{
$class_name = strtolower($class_name);
require_once $class_name . '.php';
}
try
{
// $db = db::factory('mysql://test:test@localhost/test');
// $db = db::factory('mysql://test:test@localhost:3036/test')
$db = db::factory('sqlite://localhost/test');
$res = $db->query('SELECT * FROM irgendwas');
while($row = $db->fetch($res)) print_r($row);
}
catch (Exception $e)
{
echo '<pre>';
echo 'Ausnahme gefangen: ', "\n",
$e->getMessage(), "\n",
$e->getTraceAsString(), "\n";
echo '</pre>';
}
|
31.01.2008, 10:15:50
|
Senior Member
|
|
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
|
|
AW: "try catch" selbst gebaut
Oder bereits vorgefertigt , weit weniger rudimentär und dafür weiter verbreitet (einfach weil es bie php seit 5.1 mit dabei ist): http://de.php.net/pdo
__________________
Wat der Bauer nich kennt, dit frisster nich.
|
31.01.2008, 11:19:14
|
|
AW: "try catch" selbst gebaut
Nee... Ich finde, er sollte sich erstmal mit PDO usw. beschäftigen.
Scherz beiseite:
Natürlich soll und darf man sowas selbst entwickeln. Zumindest zu Übungszwecken. Wie soll sich sonst die Einsicht entwicken, dass andere es schon besser gemacht haben? Und sonst lernt man einfach dull die Benutzung einer vorgegebenen Klasse, ohne zu ahnen, warum dieses PDO genau so gebaut wurde.
Zum Lernen gehört es dazu, dass man Irgendwas nachprogrammiert, was schon tausende vor einem gemacht haben.
Beispiel: Rekursion
Um die Abläufe zu begreifen, bietet sich auf Grund ihrer Einfachheit die Fakultätsfunktion an. Auch wenn jeder (halbwegs)Profi es iterativ erledigen würde. Und das WARUM, lernt man auch sofort dabei.
Geändert von rambi (31.01.2008 um 11:20:43 Uhr)
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 14:43:24 Uhr.
|