【问题标题】:PHP variable in SQLite querySQLite 查询中的 PHP 变量
【发布时间】:2013-07-24 13:29:42
【问题描述】:

我是网络相关编码的初学者,我正在尝试制作一个网络界面,我可以在其中读取和写入 sqlite 数据库。我目前的问题是实现一个 PHP 变量 ($inNodeID) 到 sqlite 查询:

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>";

【问题讨论】:

    标签: php sql sqlite


    【解决方案1】:

    看来你正要使用正确的方法,但由于某种原因放弃了

    给你:

    $result = $db->prepare('SELECT * FROM data WHERE NodeID = ?');
    $result->execute(array($inNodeID));
    $data = $result->fetchAll();
    
    foreach($data as $row)
    ...
    

    【讨论】:

    • 非常感谢,这已解决!我认为这是使用'?在我最初错过的 sql 查询中。
    • 不,您可以使用任何一种方式。 准备 / 执行你真正错过的事情的正确顺序
    【解决方案2】:

    使用 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 的文档。

    【讨论】:

      【解决方案3】:

      问题是因为您包含变量$inNodeID。如果变量包含在引号中,PHP 会根据所使用的引号以不同的方式表现。 PHP 仅在将变量括在双引号中时对其进行评估,如果将其与单引号一起使用,则 PHP 将其视为字符串。

      请将您的代码更改为以下任一选项,您的问题将得到解决

      选项 1

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

      选项 2

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

      欲了解更多信息,请查看PHP Manual

      【讨论】:

      • 这本来是最简单的解决方案,也是我希望的解决方案,但这些都不起作用。不过感谢您的帮助!
      【解决方案4】:

      你应该做三个步骤:

      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 或任何您想要的...

      【讨论】:

        【解决方案5】:

        你不需要在变量周围加上 "。所以试试:

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

        【讨论】:

        • 不知道为什么这个答案被降级,因为它是(或至少是'a')手头问题的正确答案。虽然我同意 @Your-Common-Sense 所写的内容,但他没有回答这个问题。
        猜你喜欢
        • 1970-01-01
        • 2017-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多