将列乘以用户定义的变量

时间:2012-07-29 10:19:54

标签: php mysql

我有一个select语句,如下所示

$test = $pdo->query('Select col1, SUM(col2), SUM(col3), SUM(col3)*SUM(col2) from table group by col1');

我现在想要乘以col2的总和,这样我就可以使用这条线了

$test = $pdo->query('Select col1, SUM(col2)*100, SUM(col3), SUM(col3)*SUM(col2) from table group by col1');

但是我希望用户能够在表单中定义数字。我有表格工作,我已经创建了一个变量,如下所示。

$custom = ($_POST['custom']);

但是当我尝试将$ custom放入我的select语句时,我收到一个错误。我在这里尝试了一些不同的东西,但似乎无法得到结果。我觉得类似下面的东西可能会起作用,但事实并非如此?处理这个问题的最佳方法是什么?

$test = $pdo->query('Select col1, SUM(col2)*'$custom', SUM(col3), SUM(col3)*SUM(col2) from table group by col1');

2 个答案:

答案 0 :(得分:2)

您最好的选择是使用预准备语句来传递参数。但是,您不能在列列表中使用预准备语句参数,因此您必须引用该值。

$test = $pdo->query('
    Select 
        col1, 
        SUM(col2)*' . $pdo -> quote ($_POST ['custom']) . ', 
        SUM(col3), 
        SUM(col3)*SUM(col2) 
    from table 
    group by col1');

你还必须确保$ _POST是数字,因为如果它是空白的或者你不能相乘的东西那么查询仍然会失败。你可以这样做。

$custom = $_POST ['custom'] * 1;
$test = $pdo->query('
    Select 
        col1, 
        SUM(col2)*' . $pdo -> quote ($custom) . ', 
        SUM(col3), 
        SUM(col3)*SUM(col2) 
    from table 
    group by col1');

答案 1 :(得分:1)

将其转换为如下编号,然后尝试此

$custom = $_POST ['custom'] * 1;
$test = $pdo->query('Select col1, SUM(col2)*' . $custom . ', SUM(col3), SUM(col3)*SUM(col2) from table group by col1');