【问题标题】:MYSQL SELECT statement with variable based on PHP loop带有基于 PHP 循环的变量的 MYSQL SELECT 语句
【发布时间】:2015-12-12 01:13:28
【问题描述】:
for ($i=1;$i<5;$i++) //Loop read & save all vars from fieldform
{
    if (array_key_exists('country'.$i, $_POST) == true)
    {
            ${"country".$i} = $_POST['country'.$i];

            $get_id = mysqli_query($connection, "SELECT country_id FROM country WHERE country_pl = '{$country[$i]}'");
            $row = mysqli_fetch_assoc($get_id);
            $country_id = $row['country_id'];
            echo $country_id; 
    }
}

这是一个用于读取和保存表单字段中选择的国家/地区名称的循环。除了 MYSQL QUERY,一切正常。我不知道如何在 MySQL 语句中正确编写 '{$country[$i]}'

【问题讨论】:

  • 请参考stackoverflow.com/help/mcve 您至少应该向我们提供您希望提供给此代码的内容,以及您希望从中得到什么响应。你没有描述你想要达到的目标。

标签: php mysql for-loop


【解决方案1】:

不要使用可变变量,使用数组。

$country[$i] = mysqli_real_escape_string($connection, $_POST['country'.$i]);

那么你可以这样做:

$get_id = mysqlil_query($connection, "SELECT country_id FROM country WHERE country_pl = '{$country[$i]}'");

【讨论】:

  • 我还想知道为什么您不使用数组作为输入。如果您将输入命名为 name=country[] 而不是 name=country1 等,$_POST['country'] 将是所有国家/地区输入的数组。
【解决方案2】:

最好运行一个查询而不是每次迭代一个。我建议:

$countries = array();
for ($i=1;$i<5;$i++) //Loop read & save all vars from fieldform
{
    if (array_key_exists('country'.$i, $_POST))
    {
        $countries[] = mysqli_real_escape_string($connection, $_POST['country'.$i]);
    }
}

$get_id = mysqli_query($connection, "SELECT country_id FROM country WHERE country_pl IN ('" . implode ("', '", $countries) . "')");

while ($row = mysqli_fetch_assoc($get_id)) {
    $country_id = $row['country_id'];
    echo $country_id;
}

理想情况下,您应该使用准备好的语句,但这有点棘手:请参阅Trouble binding an imploded array into a mysql prepared statement

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多