недопустимое смещение строки в массиве php с запросом odbc / db2 - PullRequest
0 голосов
/ 29 января 2020

Я запускаю эту функцию, которая выбирает данные, и мне их выбрасывают в другую функцию для вставки, но при ошибках и выполнении var_dump моих результатов (которые успешно выгрузили массив) я получаю "недопустимое смещение строки «для каждого столбца»

Несмотря на то, что я приводил эти значения, мой массив в основном печатает каждое значение в виде строки (1) «число» или строка (10) «значение», поэтому я знаю, что я не здесь имена столбцов не могут быть указателями.

Что я делаю не так?

edit: сообщение об ошибке PHP Warning: Illegal string offset 'QT' in line 38

public  function ref()
{

    $sql = "select cast(co as DECIMAL) as co, 
                    cast(sl as DECIMAL)as sl, 
                    cast(pr as character(10)) as pr, 
                    cast(qt as decimal) as qt 
            FROM tableOne";
    $results = odbc_exec($this->DB2Conn, $sql);

    $log='';
    if ($results) {
        while($row = odbc_fetch_array($results)) {
            foreach($row as $r){
                $res = $this->add($r['sl'], $r['pr'], $r['qt'], $r['co']);
            }
        }
    }
    return $log;
}

Ответы [ 2 ]

2 голосов
/ 29 января 2020

Ваш внутренний foreach не нужен

 if ($results) {
    while($r = odbc_fetch_array($results)) {
        $res = $this->add($r['sl'], $r['pr'], $r['qt'], $r['co']);
    }
}
0 голосов
/ 29 января 2020

Здесь вы загружаете результат в $ row как array ():

while($row = odbc_fetch_array($results)) {

И здесь вы перебираете $ row ...

foreach($row as $r){

... так что здесь $ r это скаляр, а не массив.

$res = $this->add($r['sl'], $r['pr'], $r['qt'], $r['co']);

Возможное решение (слишком мало деталей, чтобы быть точным):

while($row = odbc_fetch_array($results)) {
        $res = $this->add($row['sl'], $row['pr'], $row['qt'], $row['co']);
}
...