Php 如何在WHERE sql子句中使用数组?

Php 如何在WHERE sql子句中使用数组?,php,mysql,arrays,Php,Mysql,Arrays,我正在尝试运行以下php代码: $con = mysql_connect("localhost", "root", "") or die('connection not made'); $db = mysql_select_db('name', $con) or die('db not selected'); $query1 = "SELECT * FROM nodesensors WHERE NodeID=2"; $result1 = mysql_query($query1, $con);

我正在尝试运行以下php代码:

$con = mysql_connect("localhost", "root", "") or die('connection not made');
$db = mysql_select_db('name', $con) or die('db not selected');

$query1 = "SELECT * FROM nodesensors WHERE NodeID=2";
$result1 = mysql_query($query1, $con);
$sensorids = mysql_fetch_array($result1);

$query2 = "SELECT SensorID, Variable FROM sensors WHERE SensorID IN($sensorids)";
$result2 = mysql_query($query2, $con) or die('query not made');
$sensors = mysql_fetch_array($result2);

echo $sensors;
其中,我只想获取具有SensorID的传感器,这也是“SensorID”数组中的一个值。 当我运行代码时,我得到以下信息:

Notice: Array to string conversion in C:\...\test.php on line 10
query not made
当我删除“$”时,如下所示:

$query2 = "SELECT SensorID, Variable FROM sensors WHERE SensorID IN(sensorids)";
通知消失了,但仍然没有提出疑问

“传感器ID”阵列的格式有问题吗

另外,“echo”是表示数组的正确方法还是应该使用其他方法

非常感谢

修复

  • SELECT*
    错误,请从
    nodesensors

    从节点传感器中选择传感器\u列…

  • 在将胶水应用于第二个查询之前,请与胶水一起使用

    $id_list=内爆(“,”,$sensorids)

  • 接受逗号分隔的值

    传感器id在(“.$id_列表”)中的位置;


    • 试试这个,你就完成了, 请不要使用Select*,而只使用包含senserid的列

      <?php
      
          $con = mysql_connect("localhost", "root", "") or die('connection not made');
          $db = mysql_select_db('name', $con) or die('db not selected');
      
          $query1 = "SELECT * FROM nodesensors WHERE NodeID=2";
          $result1 = mysql_query($query1, $con);
          $sensorids = mysql_fetch_array($result1);
      
          $query2 = "SELECT SensorID, Variable FROM sensors WHERE SensorID IN(".implode(',',$sensorids).")";
          $result2 = mysql_query($query2, $con) or die('query not made');
          $sensors = mysql_fetch_array($result2);
      
          echo $sensors;
      
      ?>
      
      
      
      使用


      您不必使用
      内爆
      或任何东西,只需组合查询即可

      SELECT SensorID, Variable FROM sensors WHERE SensorID IN
      (
        SELECT id FROM nodesensors WHERE NodeID=2
      )
      
      所有基于
      内爆的答案的注释

      只有当他们在第一次查询中只选择一列时,这才有效。他们正在执行
      select*
      ,这将生成一个多维数组,并且不包含唯一的传感器ID,因此将失败。有关更多信息,请参阅diEcho的更新答案

      并为MySQL使用更新、更安全的扩展


      我怀疑您可以在1个查询中执行此操作,但我不知道您的
      id
      字段的名称,可能是
      SensorID
      或其他名称

      $query2 = 
        "SELECT SensorID, Variable
         FROM sensors 
         WHERE SensorID IN (
           SELECT id
           FROM nodesensors
           WHERE NodeID=2
         )";
      $result2 = mysql_query($query2, $con) or die('query not made');
      $sensors = mysql_fetch_array($result2);
      
      或者:

      $query2 = 
        "SELECT s.SensorID, s.Variable
         FROM sensors AS s
         INNER JOIN nodesensors ns ON ns.id = s.SensorID
         WHERE ns.NodeID=2";
      $result2 = mysql_query($query2, $con) or die('query not made');
      $sensors = mysql_fetch_array($result2);
      

      不@RobinvdA他们不必,
      内爆
      将在一条直线上完成工作正确的解决方法是使用联接或子查询…..永远不要使用
      SELECT*FROM
      …第一个合理的建议!:-)我可以对下一个投票人发表评论吗?是的,我是下一个投票人,原因在diEcho的回答中提供。请iew@Hanky웃Panky只是我能知道我的错误是什么,我已经更新了我的答案谢谢:)呃,错误仍然存在:)第一个查询需要更改为只选择一列。@Hanky웃Panky是的,但我从他的数据库表中不知道列的确切名称。你知道,使用他们的代码,这将永远不会起作用。
      $sensorids
      包含
      SELECT*
      的结果,而不仅仅是一列。这将失败。哦,我不知道这一点。
      $query2 = 
        "SELECT s.SensorID, s.Variable
         FROM sensors AS s
         INNER JOIN nodesensors ns ON ns.id = s.SensorID
         WHERE ns.NodeID=2";
      $result2 = mysql_query($query2, $con) or die('query not made');
      $sensors = mysql_fetch_array($result2);