sql >> Base de Datos >  >> RDS >> Mysql

PDO Insertar matriz usando la clave como nombre de columna

Yo lo haría de esta manera:

Declare las columnas primero. Los usaremos para extraer un subconjunto de $_POST para usarlo como columnas. De lo contrario, un usuario podría pasar parámetros de solicitud falsos que no coinciden con ninguna columna de la tabla, lo que rompería nuestro SQL.

$columns = array('username','email','password','name');
$column_list = join(',', $columns);

Cree marcadores de posición de parámetros con nombre, es decir, :username .

$param_list = join(',', array_map(function($col) { return ":$col"; }, $columns));

Forme el SQL por separado, porque es más fácil de leer y depurar si está en su propia variable.

$sql = "INSERT INTO `applications` ($column_list) VALUES ($param_list)";

Siempre verificar el estado de error devuelto por prepare() y execute() .

$statement = $db->prepare($sql);
if ($statement === false) {
  die(print_r($db->errorInfo(), true));
}

Aquí tomamos solo los campos de $_POST que coinciden con las columnas que queremos insertar.

$param_values = array_intersect_key($_POST, array_flip($columns));

Y pasa esa matriz a execute() . Nuevamente, verifique el estado de retorno de error.

$status = $statement->execute($param_values);
if ($status === false) {
  die(print_r($statement->errorInfo(), true));
}