Php odbc数组中的行为';t正确显示索引和变量,字符串偏移量非法
我不确定我在这里做了什么,但我一直在尝试运行这个select,获取行值,并使用foreach来调用一个函数,该函数使用这些值(作为函数的参数)进行后续插入 我得到了非法的字符串偏移量错误和未定义的变量,所以我将其转储到如下所示的数组中 我如何正确地修改它以获得“PR”=“ABCD”等等Php odbc数组中的行为';t正确显示索引和变量,字符串偏移量非法,php,arrays,Php,Arrays,我不确定我在这里做了什么,但我一直在尝试运行这个select,获取行值,并使用foreach来调用一个函数,该函数使用这些值(作为函数的参数)进行后续插入 我得到了非法的字符串偏移量错误和未定义的变量,所以我将其转储到如下所示的数组中 我如何正确地修改它以获得“PR”=“ABCD”等等 public function ref() { $sql = "select cast(co as DECIMAL) as co, cast(sl as DECIMAL)as sl, cast(pr
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 tailbone";
$results = odbc_exec($this->DB2Conn, $sql);
$log='';
if ($results) {
while($row = odbc_fetch_array($results))
{
var_dump($row);
$res = $this->add_quota($results['sl'], $results['pr'], $results['qt'], $results['co']);
}
}
}
阵列转储:
array(4)
["CO"]=>
string(1) "1"
["SL"]=>
string(1) "1"
["PR"]=>
string(4) "ABCD"
["QT"]=>
NULL
}
如果你var\u dump($results)
你会得到类似的结果
resource(5) of type (odbc result)
这意味着odbc\u exec
返回一个资源,不能将其用作数组。但既然你越来越
非法字符串偏移量
这意味着您正试图访问类似于关联数组的字符串。但是,因为我们现在知道,$results
是一种资源类型,所以您看到的错误消息很有可能发生在add\u quota
方法中
所以在这个方法中,你可能会发现类似的东西
function add_quota(...$args) {
$args[0]['string']; // this is wrong, strings have no string keys
}
所以你应该做的是
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 tailbone";
$results = odbc_exec($this->DB2Conn, $sql);
$log='';
if ($results) {
while($row = odbc_fetch_array($results))
{
$res = $this->add_quota($row['sl'], $row['pr'], $row['qt'], $row['co']);
}
}
}
$row
这是一个数组,包含由odbc\u fetch\u array
函数返回的结果。您var\u dump
了$row
但是使用了$results
所以我应该使用该行吗?但它是否仍然应该是$row['SL']等?是的。嗯,我不确定您在add_quota
中使用它们的目的是什么,但是使用$result
对象肯定不是方法(否则for循环会有什么作用?)。我还猜“CO”是“COMPN”的缩写,等等?这与您之前的问题非常相似-为什么会有差异?