PDO查询重复一个绑定而不是他们自己的

时间:2016-06-29 08:22:33

标签: php pdo

我对我的CRUD插件有疑问。我正在处理更新部分,当我更新查询时,所有列都会获得':id'作为价值,而不是他们自己的。

在我的debugDumpParams();

之下
string(7) "column1"
string(4) "help"
string(7) "column2"
string(4) "help"
string(2) "id"
string(1) "4"

SQL: [69] UPDATE test SET column1 = :column1, column2 = :column2 WHERE id = :id

Params:  3
Key: Name: [8] :column1
paramno=-1
name=[8] ":column1"
is_param=1
param_type=2
Key: Name: [8] :column2
paramno=-1
name=[8] ":column2"
is_param=1
param_type=2
Key: Name: [3] :id
paramno=-1

我的CRUD的其他部分正在工作,插件几乎以相同的方式工作,所以我不知道我做什么,也许外面的人可以看到我无法看到的恐怖

在我的代码下面:

}elseif($type == 'update') {

    $columns = array_keys($column);
    $col_set = implode(",",$columns);

    $query_array = array();

    foreach ($column as $key => $value) {

        if($key == 'id'){
            $query_array_id = $key.' = :'.$key;
        }else{
            $query_array[] = $key.' = :'.$key;
        }

    }
    $query = ''.$query.' '.$table.' SET '.implode(", ",$query_array).' WHERE '.$query_array_id.'';

    $dbh_query = $dbh->prepare($query);

    foreach ($column as $key => $value) {

        $dbh_query->bindParam(':'.$key, $key);
        var_dump($key);
        $key = trim($value);
        var_dump($key);

    }

    $dbh_query->execute();  
    $dbh_query->debugDumpParams();

    echo '<br/>';

    return $dbh_query;
}

我在数据库中的内容:

'column1' => '4',   
'column2' => '4', 
'id' => '4'

这是错误的,因为我的函数调用是:

$postFile->processing('update', 'test', array(
                                              'column1' => 'help',  
                                              'column2' => 'help', 
                                              'id' => '4'
                                             ));

非常感谢!

更新<!/强>

改变我的一些代码并且它有效,非常感谢!

}elseif($type == 'update') {

    $columns = array_keys($column);
    $col_set = implode(",",$columns);

    $query_array = array();

    foreach ($column as $key => $value) {

        if($key == 'id'){
            $query_array_id = $key.' = :'.$key;
        }else{
            $query_array[] = $key.' = :'.$key;
        }

    }

    $query = ''.$query.' '.$table.' SET '.implode(", ",$query_array).' WHERE '.$query_array_id.'';

    $dbh_query = $dbh->prepare($query);

    $dbh_query->execute($column);


    return $dbh_query;

1 个答案:

答案 0 :(得分:2)

将您的数据直接发送到执行中。不使用bindParam

$dbh_query = $dbh->prepare($query);
$dbh_query->execute($column);

但你必须明白这一切意大利面

''.$query.' '.$table.' SET '.implode(", ",$query_array).' WHERE '.$query_array_id.''

非常容易受到SQL注入攻击