多查询选择使用错误的数组?

时间:2016-04-18 08:30:32

标签: php mysql arrays

我有一个多查询选择哪一半工作。第一个问题是直截了当的。

$sql = "SELECT riskAudDate, riskClientId, RiskNewId FROM tblriskregister ORDER BY riskId DESC LIMIT 1;";

即使我自己这样做,第二个似乎也不起作用:

$sql ="SELECT LAST(riskFacility) FROM tbleClients";

如果我摆脱LAST,它会返回表格中该字段的第一个条目。我想使用LAST来获取该字段中的最后一个条目。

当我自己做第一个查询时,我得到了返回的数据,我可以将它回显到屏幕上。当我添加第二个(没有最后一个)我什么都没得到。这是我正在使用的

$result = $conn->query($sql);      
if ($result == TRUE){     
    $r = $result->fetch_array(MYSQLI_ASSOC);
    echo $r['riskAudDate']; 
    echo $r['riskClientId'];
    echo $r['RiskNewId'];
    echo $r['riskFacility'];
    echo "<pre>";
    print_r($r);
    echo "</pre>";
}

最后一点是让我看到阵列中的什么,只是为了测试。 所以我已经弄清楚它的结果数组是不对的。 如果我将实际查询更改为多查询,我会得到:

Call to a member function fetch_array() on boolean 

因此,对于多查询,数组位似乎是错误的。返回的数据是每个表的一行。它适用于顶级查询,但在第二个查询中添加(我不确定它是否正确)并且整个事情崩溃了。所以我想这是一个两部分的问题。我的插入有什么问题,我的返回数组有什么问题?

2 个答案:

答案 0 :(得分:2)

  1. mysql中没有last()函数,只有ms访问才支持它,如果我没弄错的话。在mysql中,您可以执行第一个查询中的操作:执行order by并将结果限制为1.

  2. 根据错误消息,$conn->query($sql)返回一个布尔值(可能为true),因此您无法在其上调用$result->fetch_array(MYSQLI_ASSOC)。因为我们不知道你在$ sql变量中到底有什么,我可以说你需要调试你的代码来推断为什么$conn->query($sql)返回一个布尔值。

  3. 虽然从mysqli_query()的文档中不是很清楚,但它一次只支持执行1个查询。要一次执行多个查询,请使用mysqli_multi_query()(您也可以在OO模式下调用此查询,请参阅文档)。但是,出于安全考虑,我宁愿两次分别调用mysqli_query()。如果您无法执行多个查询,则执行成功的SQL注入攻击会更加困难。

答案 1 :(得分:1)

在我看来,你试图一次做两个SQL查询。 这是不可能的。单独执行

$result = $conn->query($sql); 
if ($result == TRUE){     
    while( $r = $result->fetch_array(MYSQLI_ASSOC)) {
        ...
    } 
}

每个SQL查询。

关于:

$sql ="SELECT LAST(riskFacility) FROM tbleClients";

由于MySQL中不存在最后一个函数,我建议做这样的事情(因为我不知道你的意思是什么)

$sql ="SELECT riskFacility FROM tbleClients order by riskFacility desc limit 0,1";
相关问题