1

我有一个 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 放入我的选择语句时,我得到了一个错误。我在这里尝试了一些不同的东西,但似乎无法得到结果。我认为类似于下面的东西可能会起作用,但不是吗?处理这个问题的最佳方法是什么?

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

2 回答 2

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');
于 2012-07-29T10:28:19.077 回答
1

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

$custom = $_POST ['custom'] * 1;
$test = $pdo->query('Select col1, SUM(col2)*' . $custom . ', SUM(col3), SUM(col3)*SUM(col2) from table group by col1');
于 2012-07-29T10:32:27.130 回答