将列乘以用户定义的变量


multiply columns by a user defined variable

我有一个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');

最好使用prepared语句传入参数。但是,不能在列列表中使用prepared-statement参数,因此必须在中引用值。

$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');

将其转换为数字,如下所示,并尝试此

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