我可以用数组和 foreach 循环做 PDO prepare 语句吗
Can I do PDO prepare statements with array and foreach loop
所以我开始阅读 PDO 和 PDO statemnts 来更新我的代码并提高它的安全性,但我真的不知道这是否可以或是否可以进行注入。我还在制作数组之前清理数据。我创建了这个函数 o 添加给定名称 table 的数据和一个包含列名称和值的数组,如下所示
$tabla = 'tabla'
$datos = array(
'id' => 'NULL',
'id_usuario' => "'{$usuario['id']}'",
'id_tipo' => "'{$tipo}'",
'id_estado' => "'{$estado}'",
'id_visibilidad' => "'{$visibilidad}'",
'titulo' => "'{$titulo}'",
'contenido' => "'{$contenido}'",
'fecha' => 'CURRENT_TIMESTAMP'
);
function pdo_agregar($tabla, $datos) {
global $pdo;
$columnas = implode(', ', array_keys($datos));
$valores = implode(', ', array_values($datos));
$sentencia = $pdo->prepare("INSERT INTO $tabla ($columnas) VALUES ($valores)");
foreach($datos as $indice => $valor) {
$sentencia->bindParam(':'.$indice, $valor);
}
if($sentencia->execute()) {
return true;
} else {
return false;
}
$sentencia->close();
$pdo->close();
}
这样可以吗? o 我是否必须做出类似
的陈述
$sentencia = $pdo->prepare("INSERT INTO $tabla (col, col2, col3)
VALUES (:col, :col2, :col3");
然后单独绑定参数?
提前致谢!
你不需要这些绑定的东西,你可以直接把一个数组扔给 PDO 的执行函数(它为你做这个绑定)。
我的数组如下 ["data" => "mydata", "data2" = "mysecond"]
所以我会生成如下查询:
INSERT INTO `Tab`(`data`, `data2`) VALUES (:data, :data2)
代码为:
foreach($data as $key=>$val){
$keys[] = $key;
$vals[] = ":".$key;
}
$keys = "`".implode("`,`", $keys)."`";
$vals = implode(",", $vals);
$sql = "INSERT INTO `".$tab."`(".$keys.") VALUES (".$vals.")";
$prep_insert = $this->pdo->prepare($sql);
$prep_insert->execute($data);
顺便说一句,你应该使用 类 和这个,而不是这个全局的东西。
所以我开始阅读 PDO 和 PDO statemnts 来更新我的代码并提高它的安全性,但我真的不知道这是否可以或是否可以进行注入。我还在制作数组之前清理数据。我创建了这个函数 o 添加给定名称 table 的数据和一个包含列名称和值的数组,如下所示
$tabla = 'tabla'
$datos = array(
'id' => 'NULL',
'id_usuario' => "'{$usuario['id']}'",
'id_tipo' => "'{$tipo}'",
'id_estado' => "'{$estado}'",
'id_visibilidad' => "'{$visibilidad}'",
'titulo' => "'{$titulo}'",
'contenido' => "'{$contenido}'",
'fecha' => 'CURRENT_TIMESTAMP'
);
function pdo_agregar($tabla, $datos) {
global $pdo;
$columnas = implode(', ', array_keys($datos));
$valores = implode(', ', array_values($datos));
$sentencia = $pdo->prepare("INSERT INTO $tabla ($columnas) VALUES ($valores)");
foreach($datos as $indice => $valor) {
$sentencia->bindParam(':'.$indice, $valor);
}
if($sentencia->execute()) {
return true;
} else {
return false;
}
$sentencia->close();
$pdo->close();
}
这样可以吗? o 我是否必须做出类似
的陈述$sentencia = $pdo->prepare("INSERT INTO $tabla (col, col2, col3) VALUES (:col, :col2, :col3");
然后单独绑定参数?
提前致谢!
你不需要这些绑定的东西,你可以直接把一个数组扔给 PDO 的执行函数(它为你做这个绑定)。
我的数组如下 ["data" => "mydata", "data2" = "mysecond"]
所以我会生成如下查询:
INSERT INTO `Tab`(`data`, `data2`) VALUES (:data, :data2)
代码为:
foreach($data as $key=>$val){
$keys[] = $key;
$vals[] = ":".$key;
}
$keys = "`".implode("`,`", $keys)."`";
$vals = implode(",", $vals);
$sql = "INSERT INTO `".$tab."`(".$keys.") VALUES (".$vals.")";
$prep_insert = $this->pdo->prepare($sql);
$prep_insert->execute($data);
顺便说一句,你应该使用 类 和这个,而不是这个全局的东西。