我有这个代码试图从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
函数时(如果在$keyword
中找不到title
),我没有得到它,它根本没有响应。
即使我提供了一个不应该在那里找到的关键字,它仍会提供警告Operation done successfully
(不在echo
中执行while
)。
所以我猜这个问题出在if
的事情上。
我在第D行将其改为:
$ret->query$db($sql);
仍然无效。 我错过了什么?感谢。
答案 0 :(得分:0)
我从Mark Baker的评论中学到了这一点,谢谢。
$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';
}
我没有检查它是否确实给了返回的行。