【问题标题】:Variables as variables from MySQL resultMySQL 结果中的变量作为变量
【发布时间】:2014-08-30 22:49:33
【问题描述】:

我有一个 MySQL 数据库表,其中配置了十六进制、rgb 十进制和 cmyk 颜色模型中所有需要的颜色。我想做的就是根据对变量的查询存储所有合适的结果。请向新手展示他如何正确有效地做到这一点...在此先感谢

数据库

我的耻辱

$result=$mysqli->query("SELECT * FROM config_colors WHERE `color_model_type`='hex' OR `color_model_type`='rgb'" );

while ($row=mysqli_fetch_array($result)) {
    if (($row['color']==='white') || ($row['color']==='black')) {
        if ($row['color_model_type']==='hex') {
            print_r ('$c_h_'.$row['color'].' = '.$row['color_value']);
        }
        else if ($row['color_model_type']==='rgb') {
            print_r ('$c_r_'.$row['color'].' = '.$row['color_value']);
        }
        else {}
    }
    else {
        if ($row['color_model_type']==='hex') {
            if ($row['monochromatic_level']==='lightest') {
                print_r ('$c_h_lt_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='lighter') {
                print_r ('$c_h_lr_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='light') {
                print_r ('$c_h_l_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='medium') {
                print_r ('$c_h_m_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='dark') {
                print_r ('$c_h_d_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='darker') {
                print_r ('$c_h_dr_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='darkest') {
                print_r ('$c_h_dt_'.$row['color'].' = '.$row['color_value']);
            }
            else {}
        }
        else if ($row['color_model_type']==='rgb') {
            if ($row['monochromatic_level']==='lightest') {
                print_r ('$c_r_lt_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='lighter') {
                print_r ('$c_r_lr_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='light') {
                print_r ('$c_r_l_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='medium') {
                print_r ('$c_r_m_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='dark') {
                print_r ('$c_r_d_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='darker') {
                print_r ('$c_r_dr_'.$row['color'].' = '.$row['color_value']);
            }
            else if ($row['monochromatic_level']==='darkest') {
                print_r ('$c_r_dt_'.$row['color'].' = '.$row['color_value']);
            }
            else {}
        }
        else {}
    }
}

关于查询的其他问题:查询是根据 SQL 注入的安全性编写的吗?如果我的 WHERE 子句包含整数怎么办?

【问题讨论】:

    标签: php variables mysqli while-loop sql-injection


    【解决方案1】:

    您可以使用variable variables 为新变量动态赋值

    而不是

    print_r ('$c_h_'.$row['color'].' = '.$row['color_value']);
    

    试试

    $var = 'c_h_'.$row['color'];
    $$var = $row['color_value'];
    

    【讨论】:

    • 只有一个问题:你认为有一种方法可以制作一些关联数组,它告诉while循环,使用'c_h_'表示十六进制等等,而不是列出所有可能性?希望你能理解我,如果不明白,请告诉我。
    • @falcon 很高兴它有效。抱歉,我不明白您是否可以创建一个包含详细信息的新问题?
    【解决方案2】:

    您的查询在 SQL 注入中是安全的,因为它不接收任何输入数据。当您保持查询不变时,没有注入的入口点。

    关于您的问题,如果我理解了,您最好使用每种颜色类型的数组。

    <?php
    $rgb = array();
    $hex = array();
    
    $result = mysqli->query("
        SELECT
            *
        FROM config_colors
        WHERE
           `color_model_type`='hex' OR
           `color_model_type`='rgb'
    ");
    
    while ($row = mysqli_fetch_array($result))
    {
         if ($row['color_model_type']==='hex')
              $hex[ $row['color'] ] = $row;
         elseif ($row['color_model_type']==='rgb')
              $rgb[ $row['color'] ] = $row;
    }
    

    稍后如果您需要有关 rgb 格式白色的信息,您只需 var_dump($rgb['white']);

    【讨论】:

    • 您好 Paolo,感谢您的回复,非常感谢。我试图实现你的想法,但没有成功。它向我报告有关遗漏变量的错误,我不太确定我是否完全理解它。但你是对的 - 我最好使用每种颜色类型的数组。也感谢您对 SQL 注入安全性的解释。为此 +1
    • 我将查询添加到我的源代码sn-p。如果它不适合您,请告诉我您遇到的错误
    猜你喜欢
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多