我是网络相关编码的初学者,我正在尝试建立一个可以读写sqlite数据库的Web界面。我目前的问题是为sqlite查询实现PHP变量($ inNodeID):
SELECT * FROM data WHERE NodeID = "$inNodeID"
如果我将查询中的变量替换为变量("ID007"
)的值,一切似乎都有效。那么我的语法有什么问题?
$inNodeID = "ID007";
echo "Requested node: $inNodeID \n";
print "<table border=1>";
print "<tr><td>NodeID</td><td>MemoryIndex</td><td>DataIndex</td><td>TimeStamp</td></tr>";
$result = $db->query('SELECT * FROM data WHERE NodeID = "$inNodeID"');
//$result->bindParam(':inNodeID', $inNodeID, PDO::PARAM_STR);
foreach($result as $row)
{
print "<td>".$row['NodeID']."</td>";
print "<td>".$row['MemoryIndex']."</td>";
print "<td>".$row['DataIndex']."</td>";
print "<td>".$row['TimeStamp']."</td></tr>";
}
print "</table>";
答案 0 :(得分:4)
您似乎正要使用正确方式,但出于某种原因放弃了
你走了:
$result = $db->prepare('SELECT * FROM data WHERE NodeID = ?');
$result->execute(array($inNodeID));
$data = $result->fetchAll();
foreach($data as $row)
...
答案 1 :(得分:1)
使用SQLite3,您可以这样做:
$query = $db->prepare('SELECT * FROM data WHERE NodeID = ? OR NodeID = ?');
$query->bindParam(1, $yourFirstNodeID, SQLITE3_INTEGER);
$query->bindParam(2, $yourSecondNodeID, SQLITE3_INTEGER);
$result = $query->execute();
var_dump($result->fetchArray());
您可以找到有关bindParam here的文档。
答案 2 :(得分:0)
问题是因为你有封闭的变量$inNodeID
。如果变量包含在引号中,则PHP会根据所使用的引用以不同的方式运行。 PHP仅在其用Double引号括起来时才计算变量,如果它与Single Quote一起使用,则PHP将其视为STRING。
请将您的代码更改为以下任一选项,您的问题将得到解决
选项1
$result = $db->query("SELECT * FROM data WHERE NodeID = $inNodeID");
选项2
$result = $db->query('SELECT * FROM data WHERE NodeID = '.$inNodeID);
更多信息请查看PHP Manual
答案 3 :(得分:0)
您应该执行三个步骤:
准备使用虚词和“:”代替变量的SQL代码,如下所示:
$statement = $db -> prepare("SELECT * FROM table WHERE col_test = :imaginary_word");
绑定您的php变量与上一步“虚构词”,如下所示:
$statement -> bindValue(':imaginary_word', $php_variable);
您的包含SQL代码和PHP变量的语句已准备就绪,现在该执行执行的时候了:
$your_result = $statement -> execute();
♦现在,您可以将此“ $ your_result”用于fetch_array(),fetch_all或任何您想要的...
答案 4 :(得分:-2)
你不需要“围绕变量。所以试试:
$result = $db->query('SELECT * FROM data WHERE NodeID = ' . $inNodeID );