php - php将多个值从 array的prepared 语句插入到多个列的数据中

  显示原文与译文双语对照的内容
67 2

我是PHP和 MySQL ( 一般编程),我想创建一个名为 Database_Handler的通用数据库处理程序类,它可以以帮助我管理插入。删除。选择。

我正在处理一个成员函数来处理插入,当前。在插入函数中,我希望生成一个 prepared 语句,并执行它。

假设在我的应用程序中,我已经调用了insert函数,如下所示:

$table ="books";
$cols = array('author', 'title', 'pubdate');
$values = array('Bob Smith', 'Surviving the Zombie Apocalypse', '2010');
$db_handler->insert($table, $cols, $values);

如何使用 $table$cols$values 中的数据来构建 prepared 语句?这是我的第一次工作,基于的答案,来自"如何将 array 插入到 prepared 语句中的/PHP和 PDO"。

public function insert($table, $cols, $values){
 $numvalues = count($values);
 $placeholder = array();
 for($i=0; $i<$numvalues; $i++)
 $placeholder[$i] = '?';
 $sql = 'INSERT INTO '. $table. '('. implode(",", $cols). ') ';
 $sql.= 'VALUES ('. implode("," $placeholder). ')"';
 $stmt = $this->dbh->prepare($sql);
 $for($i=0; $i<$numvalues; $i++)
 $stmt->bindParam($i+1, $values[$i])
 $stmt->execute();
}

我不认为这会有用,但也许它会给你一个我想要做的。我有点迷惑,因为在 php.net 手册上给出的示例是:

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?,?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);
//insert one row
$name = 'one';
$value = 1;
$stmt->execute();

似乎他们正在将 $name 作为参数发送给 bindParam() funciton,然后将值分配给 $name$name 被发送到 bindParam() 时,它的值是什么?或者者 bindParam() 只是将参数与变量关联,而不使用变量的数据- 允许 execute() 处理该部分。

时间:原作者:0个回答

149 0

是,bindParam 将参数绑定到变量名 ( 引用),而不是值,就像手册所说的那样。

但是,你的情况有一个更简单的语法。PDOStatement::execute 可以接受一个 array 值。

public function insert($table, $cols, $values){
 $placeholder = array();
 for ($i = 0; i <count($values); $i++)
 $placeholder[] = '?';
 $sql = 'INSERT INTO '. $table. ' (`'. implode("`, `", $cols). '`) ';
 $sql.= 'VALUES ('. implode(",", $placeholder). ')';
 $stmt = $this->dbh->prepare($sql);
 $stmt->execute($values);
}
原作者:
75 5

在方法Prototype中,bindParam 确实对变量--做了引用,即第二个参数是 mixed &$variable对绑定和语句执行之间变量的更改将影响查询。

还要注意,这就是允许你在 execute() 调用之后绑定到"输出"或者"inout"变量--的。

原作者:
135 0

你应该转义并过滤查询( 或者使用 bindParam ) 中的参数,因为插入函数内的安全原因 !

原作者:
...