SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Einführung in XHTML, CSS und Webdesign

Einführung in XHTML, CSS und Webdesign zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 29.01.2008, 22:05:23
allapow allapow ist offline
Anfänger
 
Registriert seit: Jan 2008
Ort: plz58
Beiträge: 16
allapow eine Nachricht über ICQ schicken
"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
Mit Zitat antworten
  #2  
Alt 30.01.2008, 00:59:28
rambi
Guest
 
Beiträge: n/a
AW: "try catch" selbst gebaut

Wer mysqli hat, der hat auch in PHP try + catch!
Oder?
Mit Zitat antworten
  #3  
Alt 30.01.2008, 10:27:28
defabricator defabricator ist offline
Senior Member
 
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
AW: "try catch" selbst gebaut

Ja. http://de2.php.net/oop5
__________________
Wat der Bauer nich kennt, dit frisster nich.
Mit Zitat antworten
  #4  
Alt 30.01.2008, 10:29:44
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: "try catch" selbst gebaut

genauer: http://de3.php.net/try
Mit Zitat antworten
  #5  
Alt 30.01.2008, 17:20:26
allapow allapow ist offline
Anfänger
 
Registriert seit: Jan 2008
Ort: plz58
Beiträge: 16
allapow eine Nachricht über ICQ schicken
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";
        }
    } 
Mit Zitat antworten
  #6  
Alt 30.01.2008, 17:26:56
rambi
Guest
 
Beiträge: n/a
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 17:27:18 Uhr)
Mit Zitat antworten
  #7  
Alt 30.01.2008, 21:22:16
allapow allapow ist offline
Anfänger
 
Registriert seit: Jan 2008
Ort: plz58
Beiträge: 16
allapow eine Nachricht über ICQ schicken
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.
Mit Zitat antworten
  #8  
Alt 30.01.2008, 21:29:06
rambi
Guest
 
Beiträge: n/a
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>';

Mit Zitat antworten
  #9  
Alt 31.01.2008, 11:15:50
defabricator defabricator ist offline
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.
Mit Zitat antworten
  #10  
Alt 31.01.2008, 12:19:14
rambi
Guest
 
Beiträge: n/a
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 12:20:43 Uhr)
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:08:41 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt