Php 非法字符串偏移量sqlite

Php 非法字符串偏移量sqlite,php,sqlite,plot,Php,Sqlite,Plot,这个问题已经解决了一段时间了,我想不出来。 我读过与这篇文章类似的主题,但无论如何我都没读过 我正在尝试使用php从sqlite数据库导入数据。我将使用数据来绘制它。每当我试图运行代码时,我都会陷入“非法字符串偏移”的困境 代码如下: $db = new MyDB(); if(!$db){ echo $db->lastErrorMsg(); } else { echo "Opened database successfully\n"; }

这个问题已经解决了一段时间了,我想不出来。 我读过与这篇文章类似的主题,但无论如何我都没读过

我正在尝试使用php从sqlite数据库导入数据。我将使用数据来绘制它。每当我试图运行代码时,我都会陷入“非法字符串偏移”的困境

代码如下:

   $db = new MyDB();
   if(!$db){
      echo $db->lastErrorMsg();
   } else {
      echo "Opened database successfully\n";
   }

$sql =<<<EOF
SELECT voltage from stuffToPlot;
EOF;

$voltage = array();


$ret = $db->query($sql);
while ($row = $ret->fetchArray(SQLITE3_NUM)) {
        $voltage[] = row['voltage'];
//var_dump($row);
}


$graph = new Graph(300,250);
$graph->SetScale("textlin");

$theme_class=new UniversalTheme;

$graph->SetTheme($theme_class);
$graph->img->SetAntiAliasing(false);
$graph->title->Set('Filled Y-grid');
$graph->SetBox(false);

$graph->img->SetAntiAliasing();

$graph->yaxis->HideZeroLabel();
$graph->yaxis->HideLine(false);
$graph->yaxis->HideTicks(false,false);

$graph->xgrid->Show();
$graph->xgrid->SetLineStyle("solid");
$graph->xaxis->SetTickLabels(array('A','B','C','D'));
$graph->xgrid->SetColor('#E3E3E3');

$p1 = new LinePlot($voltage);
$graph->Add($p1);
$p1->SetColor("#6495ED");
$p1->SetLegend('Line 1');
?>
?>
$db=new MyDB();
如果(!$db){
echo$db->lastErrorMsg();
}否则{
echo“已成功打开数据库\n”;
}
$sql=SetScale(“textlin”);
$theme_class=新的大学主题;
$graph->SetTheme($theme\u类);
$graph->img->SETANTIALISING(假);
$graph->title->Set('Filled Y-grid');
$graph->SetBox(false);
$graph->img->SetAntiAliasing();
$graph->yaxis->HideZeroLabel();
$graph->yaxis->HideLine(假);
$graph->yaxis->HideTicks(false,false);
$graph->xgrid->Show();
$graph->xgrid->SetLineStyle(“实体”);
$graph->xaxis->SetTickLabels(数组('A','B','C','D');
$graph->xgrid->SetColor('#e3');
$p1=新的线形图($voltage);
$graph->Add($p1);
$p1->SetColor(#6495ED”);
$p1->SetLegend(“第1行”);
?>
?>
当我转储数据时,我得到这个响应

太多了

    $voltage[] = row['voltage'];
                 ^---missing $
因此,您使用了一个未定义的常量,PHP将其“有益地”视为一个无引号的字符串,因此您可以有效地运行

    $voltage[] = 'row'['voltage'];
使用非法的字符串索引作为“字符串”-您可以将字符串视为数组并访问单个字符,但只能使用数字索引

$foo = 'hi mom';
echo $foo[1]; //  i
echo 'hi mom'[1]; // i
echo foo[1]; // undefined constant foo, assumed 'foo' -> o
因此,您使用了一个未定义的常量,PHP将其“有益地”视为一个无引号的字符串,因此您可以有效地运行

    $voltage[] = 'row'['voltage'];
使用非法的字符串索引作为“字符串”-您可以将字符串视为数组并访问单个字符,但只能使用数字索引

$foo = 'hi mom';
echo $foo[1]; //  i
echo 'hi mom'[1]; // i
echo foo[1]; // undefined constant foo, assumed 'foo' -> o

错误应该告诉您哪一行
行['voltage']应该是
$row['voltage']
您遗漏了
$
。错误应该告诉您是哪一行
行['voltage']应该是
$row['voltage']你漏掉了
$
。啊哈!所以我加上了美元符号,剩下的是预测的指数误差。我必须在数据库中添加一些东西来索引每个值吗?或者我可以直接在php中执行此操作?谢谢你的回答!您获取的是一个数字数组(
SQLITE\u NUM
),因此没有字符串键,只有numerica<代码>$row[0]
可以工作,或者切换到关联提取,因此
'voltage'
可以工作。好的,到目前为止,我已经更改为关联提取,并没有使用电压['voltage'],而是按照建议设置了零。然后,我遇到了以下错误“不能将标量值用作数组”,我在论坛上搜索了它,并找到了这样的解释:“原因是您首先用普通整数或字符串声明了变量,然后试图将其转换为数组。”但我已经将可变电压声明为数组,而不是整数,无法理解问题的原因。因此,请执行
var\u dump($row)
查看您收到的内容。我收到了尽可能正确的值。数组(1){[0]=>数组(1){[“电压”]=>浮点(4.02)}数组(1){[0]=>数组(1){[“电压”]=>浮点(4.02)}等等。是标点符号导致了错误吗?我修改了我的数据库,因为有三个空值,但这也没有帮助。[code]$ret=$db->query($sql);while($row[0]=$ret->fetchArray(SQLITE3_ASSOC)){$voltage[]=$row[0];var_dump($row);[/code]啊哈!所以我添加了美元符号,这就留下了预测的索引错误。我必须在数据库中添加一些东西来索引每个值吗?或者我可以直接在php中这样做吗?回答得很好!您获取的是数字数组(
SQLITE_NUM
),所以您没有字符串键,只有numerica。
$row[0]
可以工作,或者切换到关联提取,所以
电压'
可以工作。好的,到目前为止,我已经改为关联提取,并没有使用电压['voltage'],而是按照建议设置了零。然后,我遇到了以下错误“不能将标量值用作数组”,我在论坛上搜索了它,找到了这个解释“原因是,您首先在某个地方用普通整数或字符串声明了变量,然后试图将其转换为数组。”但我已将变量电压声明为数组,而不是整数,无法理解问题的原因。因此,请执行
var\u dump($row)
以查看您收到的内容。我会收到尽可能正确的值。数组(1){[0]=>数组(1){[“电压”]=>float(4.02)}数组(1){[0]=>array(1){[“电压”]=>float(4.02)}等等。是标点符号导致了错误吗?我修改了我的数据库,因为有三个空值,但这也没有帮助。[代码]$ret=$db->query($sql);while($row[0]=$ret->fetchArray(SQLITE3_ASSOC)){$voltage[]=$row[0];var_dump($row);[/code]