2017-09-22 2 views
1

Ich versuche, eine API zu erstellen, um Daten aus mySQL zurückzugeben. Ich versuche immer noch den PDO zu erreichen. Ich habe die folgende Abfrage, die alle Zeilen aus der DB zurückgeben sollte, basierend auf einem einzelnen Parameter, aber ich habe festgestellt, dass es oft 1 weniger zurückgibt als zurückgegeben werden sollte. Wenn es 2 Zeilen gibt, gibt es 1 zurück, wenn es 1 Zeile gibt, gibt es nichts zurück.PDO-SQL-Abfrage, die weniger Zeilen als erwartet zurückgibt

Ich habe einen Screenshot der Datenbankergebnisse beigefügt.

Irgendwelche Vorschläge würden geschätzt.

[![<?php 
// required header 
header("Access-Control-Allow-Origin: *"); 
header("Content-Type: application/json; charset=UTF-8"); 

// include database and object files 
include_once '../config/database.php'; 
include_once '../objects/casualty.php'; 

// instantiate database and casualty object 
$database = new Database(); 
$db = $database->getConnection(); 

// initialize object 
$casualty = new casualty($db); 

// set ID property of record to read 
$casualty->id = isset($_GET\['id'\]) ? $_GET\['id'\] : die(); 

// query categorys 
$stmt = $casualty->cemetery(); 
$num = $stmt->rowCount(); 

// check if more than 0 record found 
if($num>0){ 

    // products array 
    $casualtys_arr=array(); 
    $casualtys_arr\["records"\]=array(); 

    // retrieve our table contents 
    // fetch() is faster than fetchAll() 
    // http://stackoverflow.com/questions/2770630/pdofetchall-vs-pdofetch-in-a-loop 
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){ 
     // extract row 
     // this will make $row\['name'\] to 
     // just $name only 
     extract($row); 

     $casualty_item=array(
      "ID" => $ID, 
      "Filename" => $fldgraphicname, 
      "Surname" => $fldsurname, 
      "FirstNameInitial" => $fldfirstnameinitial 

     ); 

     array_push($casualtys_arr\["records"\], $casualty_item); 
    } 

    echo json_encode($casualtys_arr); 
} 

else{ 
    echo json_encode(
     array("message" => "No Casualties found.") 
    ); 
} 
?> 
<?php 
class casualty{ 

    // database connection and table name 
    private $conn; 
    private $table_name = "tblcasualty"; 

    // object properties 
    public $id; 
    public $fldgraphicname; 
     public $fldsurname; 
     public $fldfirstnameinitial; 

    public function __construct($db){ 
     $this->conn = $db; 
    } 

    public function cemetery(){    
     // query to read single record 
        $query = "SELECT * 
         FROM 
          tblnames 
         WHERE 
          tblcemetery_ID = ? 
          ORDER BY ID 
         "; 
     $stmt = $this->conn->prepare($query); 

     // bind id of product to be updated 
     $stmt->bindParam(1, $this->id, PDO::PARAM_INT); 

     // execute query 
     $stmt->execute(); 

     // get retrieved row 
     $row = $stmt->fetch(PDO::FETCH_ASSOC); 

     // set values to object properties 
     $this->fldgraphicname = $row\['fldgraphicname'\]; 
     $this->fldsurname = $row\['fldsurname'\]; 
     $this->fldfirstnameinitial = $row\['fldfirstnameinitial'\];  

      return $stmt; 
    }   

} 
?>][1]][1] 

Antwort

1

In Ihrer cemetery Funktion haben Sie eine fetch. Dadurch wird der Cursor um eine Position weiterbewegt. Wenn Sie also zu Ihrem Hauptscript zurückkehren und fetch verwenden, befinden Sie sich immer in der zweiten Zeile.

Lösungen:

  1. Schleife der fetch in der Funktion und nur ein Array aller Werte zurückgeben.

oder

  1. Nicht fetch in der Funktion und gibt das Ergebnis eingestellt, so können Sie den vollständigen Block fetch.
Verwandte Themen