Показывает только последнюю запись исправления


Проблема в том, что я хочу показать имя и номер учетной записи N клиентов в BD, но при выполнении циклов он показывает мне только последнюю введенную запись. Остальные записи приводят меня к false при выполнении var_dump ($account, $Client)

оригинальный код

<?php 

    $mult = $_POST['numCuenta'];

    $datos = explode("\n", trim($mult));

    $cliente = []; $i = 0; $stid = []; $j = 0; $cuenta = [];

    foreach($datos as $dato){
        $nuevoArreglo[] = $dato; //Recorre cada elemento dentro del arreglo
    };

    foreach($nuevoArreglo as $row){
        $conn = new PDO('oci:dbname=192.168.1.95:1521/orcl;charset=UTF8', 'bi_src', 'bi_src');
        $stid = $conn->prepare("SELECT G300NCTL, G300CTA FROM BI_SRC.GSCF300 WHERE G300CTA = '$row' AND G300ANEX=0");
        $stid->execute();
        $result = $stid->fetch(PDO::FETCH_ASSOC);
        
        $consulta[$i] = $result;

        foreach($consulta as $fila){
            $cuenta[] = $fila['G300CTA'];
            $cliente[] = $fila['G300NCTL'];
        };

        $i++;
    };
?>

<form action="mult.php" method="POST">
  <div class="form-row d-flex justify-content-center">
    <div class="col-6">
      <div class="form-group mt-3">
        <label for="numCuenta">Numeros de Cuenta</label>
        <textarea class="form-control" name="numCuenta" id="numCuenta"></textarea>
      </div>
      <div class="form-group mt-3">
        <input type="submit" value="Consultar" class="form-control btn btn-block btn-danger">
      </div>
    </div>
  </div>
</form>

текущее состояние кода

<?php 

    $mult = $_POST['numCuenta']; #Recibo los datos del formulario mediante POST
    
    $datos = explode("\n", trim($mult)); 

    print_r($datos);

    $cliente = array();
    $cuenta = array();

    foreach($datos as $dato){
        $nuevoArreglo[] = $dato; #Recorre cada elemento dentro del arreglo
    };

    $n = count($nuevoArreglo);

    $conn = new PDO('oci:dbname=192.168.1.95:1521/orcl;charset=UTF8', 'bi_src', 'bi_src');

    foreach($nuevoArreglo as $row){
        $stid = $conn->prepare("SELECT G300NCTL, G300CTA FROM BI_SRC.GSCF300 WHERE G300CTA = '$row' AND G300ANEX=0");
        $stid->execute();
        # El while irá moviendo fila por fila     
        while($result = $stid->fetch(PDO::FETCH_ASSOC)){
            $cuenta[] = $result['G300CTA'];
            $cliente[] = $result['G300NCTL'];
            $arrDatos[] = $result;
        }
        $stid->closeCursor();
    }
    
    var_dump($arrDatos);
  
    require_once 'index.php'; 
?>
Author: Comunidad, 2019-01-25

1 answers

PDO возвращает вам ресурс с данными, а затем вы должны перемещать строку за строкой, чтобы прочитать результаты. Поскольку вы применяете метод fetch только один раз, вы получаете только одни данные. Таким образом, вы должны передать fetch внутри цикла, так что он будет проходить через набор результатов строка за строкой и сохранять его в других массивах.

Например:

$mult = $_POST['numCuenta'];
$datos = explode("\n", trim($mult));
$cliente = array();
$cuenta = array();

foreach($datos as $dato){
    $nuevoArreglo[] = $dato; //Recorre cada elemento dentro del arreglo
};


$conn = new PDO('oci:dbname=192.168.1.95:1521/orcl;charset=UTF8', 'bi_src', 'bi_src');

foreach($nuevoArreglo as $row){
    $row=(int) trim($row);
    if ( !empty(trim($row)) ){
        $sql="SELECT G300NCTL, G300CTA FROM BI_SRC.GSCF300 WHERE G300CTA = :G300CTA AND G300ANEX=0";
        $stid = $conn->prepare($sql);
        $stid->bindParam(':G300CTA', $row, PDO::PARAM_INT);
        if ( $stid->execute(){

            # El while irá moviendo fila por fila     
            while ( $result = $stid->fetch(PDO::FETCH_ASSOC) ) {
                $cuenta[] = $result['G300CTA'];
                $cliente[] = $result['G300NCTL'];
                $arrDatos[] = $result; #Sólo para probar
            }
            $stid->closeCursor();

        } else {
            print_r( $conn->errorInfo() );
        }
    } else { 
        echo "valor nulo...".PHP_EOL;
    }
}

var_dump($arrDatos); # Prueba
 2
Author: A. Cedano, 2019-01-28 12:15:50