SQLite查询中的PHP变量

时间:2013-07-24 13:29:43

标签: php sql sqlite

我是网络相关编码的初学者,我正在尝试建立一个可以读写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>";

5 个答案:

答案 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)

您应该执行三个步骤:

  1. 准备使用虚词和“:”代替变量的SQL代码,如下所示:

    $statement = $db -> prepare("SELECT * FROM table WHERE col_test = :imaginary_word");
    
  2. 绑定您的php变量与上一步“虚构词”,如下所示:

    $statement -> bindValue(':imaginary_word', $php_variable);
    
  3. 您的包含SQL代码和PHP变量的语句已准备就绪,现在该执行执行的时候了:

    $your_result = $statement -> execute();
    

    ♦现在,您可以将此“ $ your_result”用于fetch_array(),fetch_all或任何您想要的...

答案 4 :(得分:-2)

你不需要“围绕变量。所以试试:

$result = $db->query('SELECT * FROM data WHERE NodeID = ' . $inNodeID );