if 语句不能很好地响应 SQLite3 语法


If statement does not respond well with SQLite3 syntax

我有这段代码试图从SQLite3 DB中检索一些值:

<?php
if (isset($_GET['keyword'])) {
   $keyword = $_GET['keyword'];
} else {
   echo 'No keywords!';
}
class DB extends SQLite3 {
   function __construct($file) {
     $this->open($file);
   }
}
$db = new DB('mpsn.sqlite3');
if (!$db) {
echo $db->lastErrorMsg();
} else {
  echo "Successfully opened DB.<br/>";
}
/* DISPLAYING RESULTS */
$sql = <<<EOF
  SELECT * from glossary WHERE title LIKE '$keyword';
EOF;
$ret = $db->query($sql);
if ($ret) {//LINE A
while ($row = $ret->fetchArray(SQLITE3_ASSOC)) {
    echo "Judul = " . $row['title'] . "<br>";
    echo "Link = " . $row['link'] . "<br>";
    echo "Deskripsi = " . $row['description'] . "<br>";        
}
echo "Operation done successfully'n";
$db->close();
} 
else {//LINE B
echo 'Not found';//LINE C
}//LINE D
?>

如果没有这些行 A、B、C 和 D。脚本工作得非常好。但是当我执行if功能时我没有得到它(以防在title中找不到$keyword),它根本没有响应。

即使我给出了一个不应该在那里找到的关键字,它仍然给出了警报Operation done successfully(没有在while中执行echo)。

所以我猜问题出在if的事情上。我在 D 行将其更改为:

$ret->query$db($sql);

仍然不起作用。我错过了什么?谢谢。

我从马克贝克的评论中学习了这个,谢谢。

$ret = $db->query($sql);
if ($ret->numColumns()&&$ret->columnType(0)!=SQLITE3_NULL) {
while ($row = $ret->fetchArray(SQLITE3_ASSOC)) {
    echo "Judul = " . $row['title'] . "<br>";
    echo "Link = " . $row['link'] . "<br>";
    echo "Deskripsi = " . $row['description'] . "<br>";        
}
echo "Operation done successfully'n";
$db->close();
} else {
echo 'Not found';
}

我没有检查它是否真的给出了返回的行。