循环迭代php后重置字符串



我需要动态地进行SQL查询。我的代码易于理解:我的函数会收到一个包含查询的数组和一个字符串,并且我将通过数组迭代,以使用查询的" Where"部分中的密钥值。这是代码的一部分:

function graficoTeste ($array, $sql) {
    $conn = connect();
    foreach ($array as $key => $value) {
        $sql .= "'". $key. "'";
        $result = $conn->query($sql);
        if(!$result)
            echo $conn->error;
        while($row = $result->fetch_assoc()) {
            $array[$key] = $row["count_est"];
        }
    }

问题是:我需要我的查询每次foreach Iterates时都会添加$键值,但是我将字符串$ sql(包含实际查询)与$键相连,这导致:

SELECT COUNT(Estudante) AS count_est FROM `2016-1` WHERE municipio='Jatai'
SELECT COUNT(Estudante) AS count_est FROM `2016-1` WHERE municipio='Jatai''Goiânia'
SELECT COUNT(Estudante) AS count_est FROM `2016-1` WHERE municipio='Jatai''Goiânia''Goiás'
SELECT COUNT(Estudante) AS count_est FROM `2016-1` WHERE municipio='Jatai''Goiânia''Goiás''Catalão'

我需要它是:

SELECT COUNT(Estudante) AS count_est FROM '2016-1' WHERE municipio='Jatai'
SELECT COUNT(Estudante) AS count_est FROM `2016-1` WHERE municipio='Goiânia'
SELECT COUNT(Estudante) AS count_est FROM `2016-1` WHERE municipio='Goiás'
SELECT COUNT(Estudante) AS count_est FROM `2016-1` WHERE municipio='Catalão'

每次循环迭代时,是否有任何方法可以将$ sql字符串恢复为默认值(最终没有$键)?

非常感谢(对不起,我的英语不好和葡萄牙代码,哈哈)。

以不同的方式运行相同的SQL语句,其中条款只需在语句中使用占位符,准备语句,然后用键/值对将其运行。每次运行时,准备好的语句都会重复使用。

您的陈述看起来像这样:

SELECT COUNT(Estudante) AS count_est FROM '2016-1' WHERE municipio = ?

您的代码将大致具有此设置:

$sql = "SELECT COUNT(Estudante) AS count_est FROM '2016-1' WHERE municipio = ?";
foreach ($array as $key => $value) {
    $stmt->execute(array($key));
    while ($row = $stmt->fetch()) {
        print_r($row);
    }
}

作为壁板效果,重复使用准备的语句会加快操作,因为数据库不必解析SQL并为每个呼叫准备一个执行计划,而只是一次。保存的执行时间可能很大。

另请参见:准备在php.net上准备的语句和存储程序

但是,根据数据库中的数据,使用一个查询

可能要高得多

SELECT COUNT(Estudante) AS count_est, municipio FROM '2016-1' group by municipio

从数据库中检索结果设置时,请查找php数组中的城市名称 - 与在循环中运行单个查询相比,服务器加载和执行时间可能要少得多。

编辑1:打字固定,编辑2:由语句建议的组

最新更新