我对我的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;
答案 0 :(得分:2)
将您的数据直接发送到执行中。不使用bindParam
$dbh_query = $dbh->prepare($query);
$dbh_query->execute($column);
但你必须明白这一切意大利面
''.$query.' '.$table.' SET '.implode(", ",$query_array).' WHERE '.$query_array_id.''
非常容易受到SQL注入攻击