[我正在使用php开发网站,在这里我使用函数将数据存储到数据库中,但是我没有使用bindParam,有人可以帮我这个忙吗? [处于保留状态]

问题描述 投票:-3回答:1

我正在使用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);

  }
}
php pdo bindparam
1个回答
1
投票

一个问题是您要为边界值添加$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());
}
© www.soinside.com 2019 - 2024. All rights reserved.