我正在使用php开发一个站点,在这里我使用一个函数将数据存储到数据库中,但是在我的插入数据函数中未使用bindParam函数。
function insertData($table,$field,$data,$connection){
$c=8;
$param = "?";
$field_values= implode(',',$field);
$data_values=implode(',',$data);
$bind = $param.$data_values;
$sql='INSERT INTO '.$table.'('.$field_values.') VALUES('.$param.')';
$stm=$connection->prepare($sql);
for ($i = 1; $i <= $c; $i++) {
$stm->bindParam($i, $data_values);
}
if ($stm->execute()) {
//return true;
$last_id = $connection->lastInsertId();
return array (true,$last_id);
}
}
一个问题是您要为边界值添加$param
,但这是单个?
。每个绑定值需要一个问号。所以您的陈述看起来像...
INSERT INTO tableName(id,name,desc) VALUES(?)
应该看起来像
INSERT INTO tableName(id,name,desc) VALUES(?,?,?)
也-使用PDO,您可以将数据值的数组传递给execute()
方法,而不是绑定每个值。此代码使用此方法,因为我认为它更简单(代码中有更多注释)...
function insertData($table,$field,$data,$connection){
// Concatenate fields, add backticks to ensure names are used properly
$field_values= implode('`,`',$field);
// Create a list of params, 1 ? for each data field (remove last comma)
$param=rtrim(str_repeat("?,", count($data)),",");
$sql='INSERT INTO '.$table.'(`'.$field_values.'`) VALUES('.$param.')';
$stm=$connection->prepare($sql);
// Rather than bindParam - pass original data array to execute.
if ($stm->execute($data)) {
$last_id = $connection->lastInsertId();
return array (true,$last_id);
}
// Return error
return array(false, $connection->errorInfo());
}