2016-08-28 3 views
0

私のコードで助けが必要です。私はこのエラーを取得する:SQLite3クエリエラー

PHP Warning: SQLite3::query(): Unable to prepare statement: 1, near = : syntax error in /var/www/html/image.php on line 16

PHP Fatal error: Uncaught Error: Call to a member function fetchArray() on boolean in /var/www/html/image.php:17`

Stack trace:

0 {main}

thrown in /var/www/html/image.php on line 17

これは私のコードです:

<?php 
error_reporting(E_ALL^E_NOTICE); 
Header("Content-type: image/png"); 
$im = imagecreate(304, 214); 
$blanco = imagecolorallocate($im, 255, 255, 255); 
imagerectangle($im, 0, 0, 304, 214, $blanco); 
$rojo = imagecolorallocate($im, 255, 0, 0); 
$verde = imagecolorallocate($im, 0, 255, 0); 
$azul = imagecolorallocate($im, 0, 0, 255); 
$amarillo = imagecolorallocate($im, 255, 255, 0); 
$violeta = imagecolorallocate($im, 46, 49, 146); 
$naranja = imagecolorallocate($im, 242, 101, 34); 
$negro = imagecolorallocate($im, 0, 0, 0); 

if ($db = new SQLite3 ('/var/www/html/db/SeriesDb.sqlite')) { 
    $q = $db-> query("SELECT * FROM tbl_Series where id "= .$_REQUEST["id"]); 
    while ($row = $q-> fetchArray()) { 
     $id = $row[0]; 
     $dayweek = date("N", strtotime($row[1])); 
     $serie = explode(" ",$row[2]); 
    } 
} else { 
    die("error"); 
} 

switch ($dayweek) { 
    case 7: $color = $rojo; 
     break; 
    case 6: $color = $naranja; 
     break; 
    case 5: $color = $amarillo; 
     break; 
    case 4: $color = $verde; 
     break; 
    case 3: $color = $azul; 
     break; 
    case 2: $color = $violeta; 
     break; 
    case 1: $color = $negro; 
} 
$j = 0; 
$y = 0; 
$x = 0; 

for ($i = 0; $i < 70; $i++) { 
    $j++; 
    if ($j > 10) 
     $j = 1; 
    $x = 30 * $j - 28; 
    $y = $i % 10 == 0 ? 2 + ($i/10) * 30 : $y; 
    imagerectangle($im, $x, $y, $x + 30, $y + 30, $negro); 
    if (in_array($i + 1, $serie)) 
     imagefilledrectangle($im, $x + 1, $y + 1, $x + 30 - 1, $y + 30 - 1, $color); 
} 
Imagepng($im); 
Imagedestroy($im); 
$db->close(); 

問題は何だろうか?

+0

はどうもありがとうございました。カートゥントとサンデッシュジャイン。問題は解決されました – user2257002

+0

あなたの質問がもう答えられないようになっていないように、回答を受け入れるべきです:http://stackoverflow.com/help/someone-answers – cartant

答えて

0

クエリが正しく生成されていないようです。ランタイム・パラメーターを照会に追加するには、prepareステートメントを使用することをお勧めします。チュートリアルthisと一緒に行くことができます。

0

=記号は、連結する文字列リテラルの外側に表示されます。$_REQUEST["id"]。しかし、連結を避けるために、準備されたステートメントを使用する方が良いでしょう

$q = $db->query("SELECT * FROM tbl_Series where id = " . $_REQUEST["id"]); 

:それはこのようなものでなければなりません

$stmt = $db->prepare("SELECT * FROM tbl_Series where id = :id"); 
$stmt->bindValue(":id", $_REQUEST["id"], SQLITE3_TEXT); 
$q = $stmt->execute();