Komme bei umstellung auf PHP7 nicht weiter

LuckySt

Mitglied
Hallo,

seit Tagen komme ich einfach hier nicht weiter bei der Umstellung von PHP 5 auf PHP 7.
Jetzt wird es hier bestimmt wieder Beiträge hageln wie "... die mal nen PHP Buch ..." oder so. Ich probiere es aber trotzdem mal hier zu fragen ob mir jemand helfen kann.

Vor einigen Jahren habe ich mir ein Script schreiben lassen welche auch meiner Meinung nach gut funktioniert hat. Habe selber kaum Ahnung von PHP und aus diesem Grund habe ich mir das schreiben lassen. Nun habe ich aber keinen Kontakt mehr zum Autor der mir vielleicht weiter helfen könnte und versuche es selbst. An folgender Stelle komme ich jetzt aber nicht weiter:

Code:
<?php
if(isset($_GET['type']))
{
    $type_arr = explode(",", substr($_GET['type'], 0, -1 ) );

    require_once 'data.php';

    $where = 'WHERE ';
    $i = 1;
    foreach ($type_arr AS $v)
    {
        if(count($type_arr) == $i)
        {
            $where .= ' type = "' . mysql_real_escape_string( $v ) . '"';
        }
        else
        {
            $where .= ' type = "' . mysql_real_escape_string( $v ) . '" OR ';
        }
        $i++;
    }

    $query = "SELECT * FROM daten $where ORDER BY city";
    $result = mysql_query($query);
    if (!$result)
    {
            die('Invalid query: ' . mysql_error());
    }
    else
    {
        $stack = Array();
        while ($row = mysql_fetch_object($result))
        {
                $data = Array();
                $data['year'] = $row->year;
                $data['month'] = $row->month;
                $data['day'] = $row->day;
                $data['zip'] = $row->zip;
                $data['city'] = $row->city;
                $data['type'] = $row->type;

                array_push($stack, $data);
        }

        $a = array('daten' => $stack) ;
        header('Cache-Control: no-cache, must-revalidate');
        header('Expires: ' . date('r', time()));
        header('Content-type: application/json');
        echo json_encode($a);
    }
}
?>

Wie bekomme ich hier die MYSQL Abfrage so hin das sie mit PHP7 funktioniert?

Vielleicht kann mir ja jemand helfen.

Vielen lieben Dank
 
So?

Code:
.....
  $sql = "SELECT * FROM daten $where ORDER BY city";
   foreach ($pdo->query($sql) as $row)
   
   $stack = Array();
   while ($row = $result->fetch_object())
   {
                $data = Array();
                $data['year'] = $row->year;
                $data['month'] = $row->month;
                $data['day'] = $row->day;
                $data['zip'] = $row->zip;
                $data['city'] = $row->city;
                $data['type'] = $row->type;
                array_push($stack, $data);
        }
        $a = array('daten' => $stack) ;
        header('Cache-Control: no-cache, must-revalidate');
        header('Expires: ' . date('r', time()));
        header('Content-type: application/json');
        echo json_encode($a);
    }
}
?>
 
Ähnlich.
Zunächst muss sich PDO mit der Datenbank verbinden können.

PHP:
$db=new PDO("mysql:host=localhost;dbname=database;","root","");
$stmt=$db->prepare("SELECT * FROM daten :where ORDER BY city");
$stmt->bindParam(':where', $where);
try{
  if(!$stmt->execute()){
  throw new Exception('error');
  }
} catch (Exception $ex) {
  // error
}
$rows = $stmt->fetchAll(PDO::FETCH_OBJ);
foreach($rows as $value){
  var_dump($value);
}

Ungefähr so sollte es aussehen.

Viele Grüße
 
hmmm meinst Du so?

Code:
<?php
if(isset($_GET['type']))
{
    $type_arr = explode(",", substr($_GET['type'], 0, -1 ) );
    require_once 'data.php';
    $where = 'WHERE ';
    $i = 1;
    foreach ($type_arr AS $v)
    {
        if(count($type_arr) == $i)
        {
            $where .= ' type = "' . mysql_real_escape_string( $v ) . '"';
        }
        else
        {
            $where .= ' type = "' . mysql_real_escape_string( $v ) . '" OR ';
        }
        $i++;
    }
   
$stmt=$db->prepare("SELECT * FROM daten :where ORDER BY city");
$stmt->bindParam(':where', $where);
try{
  if(!$stmt->execute()){
  throw new Exception('error');
  }
} catch (Exception $ex) {
  // error
}
$rows = $stmt->fetchAll(PDO::FETCH_OBJ);
foreach($rows as $value){
  var_dump($value);
}
        $a = array('daten' => $stack) ;
        header('Cache-Control: no-cache, must-revalidate');
        header('Expires: ' . date('r', time()));
        header('Content-type: application/json');
        echo json_encode($a);
}
?>

In der data.php stehen die Daten für die Verbindung drin.
 
Die Daten aus der forEach-Schleife müssen noch in ein Array.

Darüber hinaus existiert leider keinerlei Fehlerbehandlung. Wie folgt könnte es aussehen (ungetestet)

PHP:
<?php

if(isset($_GET['type'])&&!empty($_GET['type'])){
    require_once 'data.php';
    $type_arr=explode(",",substr($_GET['type'],0,-1));
    $wheres="";
    $values=array();

    // Prüfe ob $type_arr vom typ array ist
    try{
        if(!is_array($type_arr)){
            // Werfe Fehler falls kein Array
            throw new Exception('$type_arr is not an array');
        }
    }catch(Exception $ex){
        echo $ex->getMessage();
        echo ' in '.$ex->getFile().', line: '.
        $ex->getLine().'.';
        exit();
    }

    // Prüfe, ob $type_arr Inhalt hat.
    if(count($type_arr)){
        // Gehe alle Teile des Arrays durch
        // Erstelle "Wheres" und "Values"
        foreach($type_arr AS $v){
            $wheres .= ($wheres?' OR ':' WHERE ')."type = ?";
            $values []=$v;
        }
    }

    // sollte klar sein
    $query=sprintf("SELECT * FROM daten %s",$wheres);
    $stmt=$this->db->prepare($query);
    $stmt->execute($values);
    $rows=$stmt->fetchAll(PDO::FETCH_OBJ);
    $stmt->closeCursor();

    // verarbeite rücklieferung aus dem SQL-Query
    foreach($rows as $value){
        // schreibe jeden Datensatz in ein array
        $data['daten'][]=array(
            'year'=>$value->year,
            'month'=>$value->month,
            'day'=>$value->day,
            'zip'=>$value->zip,
            'city'=>$value->city,
            'type'=>$row->type
        );
    }
    try{
        // Prüfe, ob das eben befüllt Array auch als array "existiert"
        if(!is_array($data)){
            // wenn nicht, wirf Fehler
            throw new Exception('$data is not an array');
        }
    }catch(Exception $ex){
        echo $ex->getMessage();
        echo ' in '.$ex->getFile().', line: '.
        $ex->getLine().'.';
        exit();
    }
    header('Cache-Control: no-cache, must-revalidate');
    header('Expires: '.date('r',time()));
    header('Content-type: application/json');
    // Wandle Array in JSON-String um und gib es aus
    echo json_encode($data);
}
?>
 
Hier noch ein, zwei Ideen:

PHP:
<?php

if (!isset($_GET['type']) || empty($_GET['type']) || !is_string($_GET['type'])) {
    exit;
}

require_once __DIR__ . '/data.php';
// $pdo = ...

$types = explode(',', substr($_GET['type'], 0, -1));

$wherePart = implode(' OR ', array_fill(0, count($types), 'type = ?'));

$query = 'SELECT year, month, day, zip, city, type FROM daten WHERE ' . $wherePart;

$stmt = $pdo->prepare($query);

$tmp = $stmt->execute($types);

if ($tmp !== true) {
    throw new Exception($sth->errorInfo()[2]);
}

$data = $stmt->fetchAll(PDO::FETCH_ASSOC);

if (!is_array($data)) {
    throw new Exception($sth->errorInfo()[2]);
}

header('Cache-Control: no-cache, must-revalidate');
header('Expires: ' . date('r', time()));
header('Content-type: application/json');

echo json_encode(array('daten' => $data));
 
Vielen lieben Dank euch beiden.

@goto;
Hat leider auch nicht funktioniert.
Muss ich mir wenn ich mal mehr Zeit habe noch einmal genauer ansehen.

Danke schon mal für´s erste.
Werde mich mal weiter dran versuchen.
 
Zurück