变量作为MySQL结果的变量

时间:2014-08-30 22:49:33

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

我有一个MySQL数据库表,其中配置了十六进制,rgb十进制和cmyk颜色模型中所有需要的颜色。我想做的就是根据对变量的查询存储所有合适的结果。请告诉新手他怎么能正确有效地做到这一点......提前致谢

DB enter image description here

我的耻辱

$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子句包含整数怎么办?

2 个答案:

答案 0 :(得分:1)

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

而不是

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

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

答案 1 :(得分:1)

您的查询在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']);