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

时间:2014-08-26 08:55:02

标签: 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);
$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的传感器,这也是传感器中的一个值'阵列。 当我运行代码时,我得到以下内容:

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

通知消失了,但仍然没有进行查询。

'感应器的格式是否有任何问题?阵列

此外,是回声'提出数组的正确方法还是应该使用其他方法?

非常感谢!

5 个答案:

答案 0 :(得分:5)

您不必使用implode或其他任何内容,只需合并您的查询

即可
SELECT SensorID, Variable FROM sensors WHERE SensorID IN
(
  SELECT id FROM nodesensors WHERE NodeID=2
)
所有基于implode的答案的

备注

只有在第一个查询中只选择了一列时才会有效,它们正在执行SELECT *,这会产生一个多维数组,并且不包含传感器ID,因此会失败。请参阅 diEcho 更新的答案,详细了解该内容。

使用更新更安全的MySQL扩展程序

How can I prevent SQL injection in PHP?

答案 1 :(得分:2)

我怀疑你可以在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);

答案 2 :(得分:0)

修复

  • SELECT *错误,只从nodesensors

    中选择sensorID列

    SELECT sensor_column FROM nodesensors ...

  • 在将implode应用于第二个查询

    之前,请使用Mysql IN','

    $id_list = implode("','",$sensorids);

  • {{3}}采用逗号分隔值

    WHERE SensorID IN(" . $id_list . ")";

答案 3 :(得分:0)

试试这个,你就完成了, 请不要使用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;

?>

答案 4 :(得分:-1)

使用Implode

$sensorids = implode(',',$sensorids);
$query2 = "SELECT SensorID, Variable FROM sensors WHERE SensorID IN($sensorids)";