2016-09-26 90 views
0

一直在处理这个问题一段时间,我无法弄清楚。 我已经读过类似的主题,但我一直无法反正。非法字符串偏移sqlite

我想从一个sqlite数据库使用php导入数据。我将使用这些数据来绘制它。每当我尝试运行代码时,我都被卡在“非法字符串偏移量”处。

下面是代码:

$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'); 
?> 
?> 

当我转储数据我得到这个响应Picturehttp://www.ladda-upp.se/bilder/zltczhawdxetj

日Thnx了很多!

+2

错误应该告诉你 – nogad

+2

'行[ '电压']什么线;'应该是'$行[ '电压'];'你离开了'$'。 – Barmar

回答

2
$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 
+0

啊哈!所以我已经添加了美元符号,并且如预测的那样给我留下了索引错误。我是否需要在数据库中添加一些内容来为每个值建立索引?或者我可以直接在PHP中做到这一点? Thnx很多为您的答案! – JHCJ

+0

您提取为一个数值数组('SQLITE_NUM'),所以您没有字符串键,只是数字。 '$ row [0]'可以工作,或切换到关联提取,所以''voltage''工作。 –

+0

好吧,到目前为止,我已经改变为联想提取,而不是使用电压['电压'],我已经改为把零建议。下面的错误然后命中我“不能使用标量值作为数组”,我在论坛上搜索它,发现这个解释“的原因是因为某个地方你首先声明你的变量与一个正常的整数或字符串,然后你正试图把它变成一个阵列。“但是我已经将可变电压声明为一个数组,而不是一个整数,并且不能理解导致该问题的原因。 – JHCJ