Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] SQL Query funktioniert im phpmyadmin aber nicht mit PDO und PHP

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] SQL Query funktioniert im phpmyadmin aber nicht mit PDO und PHP

    Guten Morgen Leutz.

    Also erst mal mein Ziel.

    Ich habe vor eine automatische City Search und Autofill Funktionalität mit Ajax umzusetzen. DAs heist ein Benutzer fängt an eine PLZ in das Feld einzutippen und es klappt sich ein Feld auf mit zugehörigen Funden aus der DB, je mehr er eintippt desto genauer und präziser werden die Ausgaben in dem Feld.

    So weit so gut. Nun habe ich zum testen einige Daten in die 2 Tabellen geschrieben. Die wie folgt aufgebaut sind.

    Code:
    //tabelle zip_codes
    id_zip, zip_code
    
    //tabelle citys_by_zip
    id_city, id_zip, city
    Und so sieht nun der PHP Teil der Abfrage aus. Da ich momentan einfach nur die Abfrage testen will ist alles in der einen Datei, wenn das erfolgreich ist wird natürlich alles entsprechend aufgeteilt.

    PHP-Code:
    <?php
    error_reporting
    E_ALL E_STRICT);
    ini_set"display_errors"TRUE);

    /*
    *
    *    PDO Instanz
    *
    */
    $pdo = new PDO"mysql:host=localhost;dbname=city_search""root" );
    $pdo->exec"SET CHARACTER SET utf8" );

    class 
    LIT_ReadCityData_Class {
        
        protected 
    $pdo;
        protected 
    $num_ZipCode;
        protected 
    $arr_CityByZipCoedes = array();
        
        
    /**
         *
         *    Konstruktor
         *    @param $num_ZipCode:numeric vonAjax übergebene Postleitzahl
         *
         */
        
    public function __construct $num_ZipCodePDO $pdo ) {
            
    $this->pdo $pdo;
            
    $this->num_ZipCode $num_ZipCode;
        }
        
        
    /**
         *
         *    
         *
         */
        
    protected function loadCitysByZipCodes () {
            
    $sql_ReadCitys "
                            SELECT
                                zc.zip_code,
                                cbz.id_city,
                                cbz.id_zip,
                                cbz.city
                            FROM
                                zip_codes zc
                            RIGHT JOIN
                                citys_by_zip cbz
                            ON
                                ( zc.id_zip = cbz.id_zip )
                            WHERE
                                zc.zip_code LIKE '"
    .$this->num_ZipCode."%'
                            "
    ;
            
    //$sel_PrepareRC = $this->pdo->prepare( $sql_ReadCitys );
            //$sel_PrepareRC->bindParam( ":zip", $this->num_ZipCode );
            //$sel_PrepareRC->execute();
            
            
    $sel_PrepareRC $this->pdo->query$sql_ReadCitys );
            
            while ( 
    $res_Citys $sel_PrepareRC->fetchPDO::FETCH_ASSOC ) ) {
                
    $this->arr_CityByZipCoedes[$res_Citys['zip_code']] = $res_Citys['city'];
            }
            
            return 
    $this->arr_CityByZipCoedes;
        }
        
        public function 
    test () {
            
    /*if ( !is_array( $this->loadCitysByZipCodes() ) ) {
                return "kein array";
            } else {
                return "city array";
            }*/
            
    return $this->loadCitysByZipCodes();
        }
    }

    //nur für testausgaben
    $test = new LIT_ReadCityData_Class"01"$pdo );

    echo 
    "<pre>";
        
    print_r$test->test() );
    echo 
    "</pre>";
    ?>
    So wenn ich diese Abfrage nun als SQL Code auf die Tabelle zip_codes im PhpMyAdmin mache, wird exakt ausgegeben was ich erwarte. Mache ich das nun im hier zu sehenden Code wird bei 01 nur 2 Datensätze in das Array geschrieben, obwohl es mehr sein müssten.

    Hier die Abfrage und das Abfrageergebnis im PhpMyAdmin.
    SELECT zc.zip_code, cbz.id_city, cbz.id_zip, cbz.city
    FROM zip_codes zc
    RIGHT JOIN citys_by_zip cbz ON (zc.id_zip = cbz.id_zip
    )
    WHERE zc.zip_code LIKE '01%'


    Und hier die Ausgabe wenn ich mir mein Array ausgeben lassen will.

    Array
    (
    [01050] => Dresden Reick
    [01796] => Sonnenstein
    )
    Es gibt in der Tabelle zip_codes noch einen Datensatz mehr wo die PLZ mit 1 beginnt und zu der passenden PLZ gibt es in der Tabelle citys_by_zip noch 2 Datensätze die logischerweise hier nichts in den Ausgaben zu suchen haben. Also das haut ja hin, nur was die Ausgabe in PHP veranstaltet verstehe ich nicht ganz, da es in PhpMyAdmin ja passt.

    Habt ihr ein Idee was da schief läuft?

    Vielen Dank für eure Zeit und Hilfe.

    Gruß Litter

  • #2
    Ohne mir jetzt genauer den Code angesehen zu haben: Überschreibst du nicht die Einträge in deinem Array? Die PLZ scheint ja ein Schlüssel zu sein.

    Kommentar


    • #3
      Wenn ich das so mache.

      PHP-Code:
      while ( $res_Citys $sel_PrepareRC->fetchPDO::FETCH_ASSOC ) ) {
                  
      $this->arr_CityByZipCoedes[] = array(
                                                          
      $res_Citys['zip_code'] => $res_Citys['city'],
                                                      );
              } 
      Funktionert das einwandfrei, aber da habe ich ein 2 Dimensionales Array und das wollte ich eigentlich nicht. Oder ich drehe die Werte vom vorherigen Code einfach so das der Ort der Schlüsseö ist.

      Kommentar


      • #4
        Was stört dich denn an einem zweidimensionalen Array?
        PHP-Code:
        $this->arr_CityByZipCoedes[] = array(
           
        'zip_code' => $res_Citys['zip_code'],
           
        'city' => $res_Citys['city'],
        ); 
        Sowas ist doch auch ganz hübsch zu handhaben und du kannst leicht weitere Werte hinzufügen.

        [edit]

        Oder du erstellst dir mit Hilfe der Parameter ein Objekt und schiebst das als Element in das Array.

        Kommentar

        Lädt...
        X