3

我是一个与网络相关的编码的初学者,我正在尝试制作一个可以读取和写入 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>";
4

5 回答 5

4

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

干得好:

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

foreach($data as $row)
...
于 2013-07-24T13:33:50.303 回答
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 的文档。

于 2017-08-03T07:20:47.103 回答
0

问题是因为你有封闭的变量$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 手册

于 2013-07-24T16:17:39.657 回答
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 或任何您想要的...

于 2018-07-15T22:35:22.937 回答
-2

您不需要将 " 放在变量周围。所以尝试:

$result = $db->query('SELECT * FROM data WHERE NodeID = ' . $inNodeID );
于 2013-07-24T13:39:03.220 回答