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

SELFPHP


Professional CronJob-Service

Suche


International PHP Conference


WebTech Conference



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



PHP Summit


Software Architecture Summit


:: Buchempfehlung ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken zur Buchempfehlung
 
HTML5 Days


JavaScript Days


:: 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:
 
 

Deine Leidenschaft ist die Unterwasserfoto-grafie?


Dann ist Qozido genau das Richtige für Dich!

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler ist da!

www.qozido.de

 


Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 15.05.2012, 21:38:36
adrianzeitblom adrianzeitblom ist offline
Anfänger
 
Registriert seit: Oct 2007
Beiträge: 10
adrianzeitblom befindet sich auf einem aufstrebenden Ast
PDO-Rätsel

Hallo,

mag mir (PHP-Newbie) vielleicht jemand helfen, folgende Situation zu verstehen?
Der folgende Code tut nicht, was er soll.
Ich möchte gern, dass Dateinamen aus einem Verzeichnis (Beispiele für [um die Dateiendung bereits gekürzte] Namen: "000001", "000002" etc.) in die Spalte einer MySQL-Tabelle eingetragen werden, jedoch nur, sofern die Namen dort noch nicht vorhanden sind. Die Werte werden der Funktion als Array übergeben. Der folgende Code trägt zwar die Werte ein, jedoch auch dann, wenn sie bereits vorhanden sind.
Falls ihr euch fragt, warum ich die Datenbankverbindung öffne, schließe, um sie dann erneut zu öffnen usw.: Meine zweite Frage wäre, weshalb das notwendig ist. Ich hatte es zunächst probiert, indem ich die PDO-Verbindung am Funktionsbeginn geöffnet und am Ende wieder geschlossen habe, das funktionierte aber nicht: Dann landeten gar keine Daten in der Datenbank.
Hier nun der Code:

Code:
function karteiMitDatenbankAbgleichen($karteiBereinigt) {

    foreach ($karteiBereinigt as $wert) {
        $db = new PDO("mysql:host=localhost;dbname=karteiapp", 'root', '');
        try {
            $countA = $db->exec("SELECT * FROM inhalte WHERE dateiname='$wert'");
        } catch (PDOException $e) {
            echo $e->getMessage();
        }
        $db = null;

        if ($countA == 0) {
            try {
                $db = new PDO("mysql:host=localhost;dbname=karteiapp", 'root', '');
                $countB = $db->exec("INSERT INTO inhalte (dateiname) VALUES ('$wert')");
            } catch (PDOException $e) {
                echo $e->getMessage();
            }
            $db = null;
        }else{
            echo $e->getMessage();
        }
    }
}
Ich befürchte, etwas Grundsätzliches an der Funktionsweise von PDO nicht verstanden zu haben, und es wäre mir eine große Hilfe, wenn mir jemand auf die Sprünge helfen würde... Herzlichen Dank im Voraus!
Mit Zitat antworten
  #2  
Alt 15.05.2012, 23:20:56
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 46
Beiträge: 1.042
urvater befindet sich auf einem aufstrebenden Ast
AW: PDO-Rätsel

Zitat:
PDO::exec() gibt die Anzahl von Zeilen zurück, welche durch diese Abfrage geändert oder gelöscht wurden. Wenn keine Zeilen geändert wurden, gibt PDO::exec() 0 zurück.
Aus diesem Grund ist $countA IMMER 0, da ja keine Daten geändert bzw. gelöscht wurden.

Verwende
Zitat:
PDO::query() returns a PDOStatement object, or FALSE on failure.
Allerdings hier nicht mehr auf 0 vergleichen.
Mit Zitat antworten
  #3  
Alt 15.05.2012, 23:33:46
adrianzeitblom adrianzeitblom ist offline
Anfänger
 
Registriert seit: Oct 2007
Beiträge: 10
adrianzeitblom befindet sich auf einem aufstrebenden Ast
AW: PDO-Rätsel

Nun funktioniert alles.
Besten Dank für die rasche Antwort!
Mit Zitat antworten
  #4  
Alt 15.05.2012, 23:57:25
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 46
Beiträge: 1.042
urvater befindet sich auf einem aufstrebenden Ast
AW: PDO-Rätsel

Zitat:
Zitat von adrianzeitblom Beitrag anzeigen
Nun funktioniert alles.
Besten Dank für die rasche Antwort!
Klare Problembeschreibung, den richtigen Code gepostet und zum Schluss noch ein einfaches Problem. Da hilft man doch immer gern und schnell. :D
Mit Zitat antworten
  #5  
Alt 16.05.2012, 00:05:48
adrianzeitblom adrianzeitblom ist offline
Anfänger
 
Registriert seit: Oct 2007
Beiträge: 10
adrianzeitblom befindet sich auf einem aufstrebenden Ast
AW: PDO-Rätsel

Im Folgenden der abgewandelte, funktionierende Code – vielleicht hat ja jemand mal ähnliche Probleme:

Code:
function karteiMitDatenbankAbgleichen($karteiBereinigt) {

    foreach ($karteiBereinigt as $wert) {
        $db = new PDO("mysql:host=localhost;dbname=karteiapp", 'root', '');
        try {
            $countA = $db->query("SELECT * FROM inhalte WHERE dateiname='$wert'")->fetchAll();
        } catch (PDOException $e) {
            echo $e->getMessage();
        }
        $db = null;

        if (!$countA) {
            try {
                $db = new PDO("mysql:host=localhost;dbname=karteiapp", 'root', '');
                $countB = $db->query("INSERT INTO inhalte (dateiname) VALUES ('$wert')");
            } catch (PDOException $e) {
                echo $e->getMessage();
            }
            $db = null;
        }else{
            echo 'Wert schon vorhanden!';
        }
    }
}
Mit Zitat antworten
  #6  
Alt 16.05.2012, 10:31:00
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 791
Ckaos befindet sich auf einem aufstrebenden Ast
AW: PDO-Rätsel

Hi

Zitat:
Der folgende Code trägt zwar die Werte ein, jedoch auch dann, wenn sie bereits vorhanden sind.
vielleicht solltest du einen Index auf "dateiname" setzen und
dann REPLACE benutzen dann sparst du dir den ganzen Prüfkram.

Bsp. *ungetestet*
PHP-Code:
function karteiMitDatenbankAbgleichen($karteiBereinigt) {

            try {
                
$db = new PDO("mysql:host=localhost;dbname=karteiapp"'root''');
                
$countB $db->query("REPLACE INTO inhalte (dateiname) VALUES ('".implode("'),('",$karteiBereinigt)."')");
            } catch (
PDOException $e) {
                echo 
$e->getMessage();
            }
            
$db null;
    }

Vorausgesetzt du hast den Index gesetzt! übernimmt so MySql den rest.

mfg

CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
  #7  
Alt 16.05.2012, 19:46:30
adrianzeitblom adrianzeitblom ist offline
Anfänger
 
Registriert seit: Oct 2007
Beiträge: 10
adrianzeitblom befindet sich auf einem aufstrebenden Ast
AW: PDO-Rätsel

@CKaos:
Danke Dir, bin schwer beeindruckt: elegante Lösung!
Die MySQL-Erweiterung zum SQL-Standard REPLACE war mir nicht bekannt.
Funktioniert tadellos.
Mit Zitat antworten
Antwort

Stichworte
datenbankverbindung, exec, mysql, newbie, pdo


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Nochmals Rätsel jdgf PHP Grundlagen 9 09.04.2008 12:07:52
Tagesrätsel aufrufen jdgf PHP Grundlagen 4 25.03.2008 08:35:27
Der SuDoKu-Rätselwettbewerb Ichabod PHP Grundlagen 7 03.07.2006 17:25:34
Rätsel auf 9 live c4 Off Topic Area 5 24.12.2004 15:00:20
Halli, Hallo. Ein Rätsel zum lösen an alle PHP User xDragonx PHP Grundlagen 4 13.11.2004 19:11:55


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:06:41 Uhr.


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


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