Saltar al contenido

Insertar array en la base de datos MySQL con PHP

No olvides que en las ciencias cualquier problema casi siempere puede tener diversas resoluciones, no obstante nosotros aquí te enseñamos lo más óptimo y mejor.

Solución:

No puede insertar un array directamente a mysql como mysql no entiende PHP tipos de datos.mysql solo entiende sql. Así que para insertar un array en una base de datos MySQL, debe convertirla en una declaración SQL. Esto se puede hacer manualmente o por una biblioteca. La salida debe ser un INSERT declaración.

Actualización para PHP7

Desde PHP 5.5 mysql_real_escape_string ha quedado en desuso y a partir de PHP7 ha sido remoto. Ver: documentación de php.net sobre el nuevo procedimiento.


Respuesta original:

Aquí hay una declaración de inserción estándar de MySQL.

INSERT INTO TABLE1(COLUMN1, COLUMN2, ....) VALUES (VALUE1, VALUE2..)

Si tu tener una mesa con nombre fbdata con las columnas que se presentan en el keys de tu array puede insertar con este pequeño fragmento. Así es como su array se convierte en esta declaración.

$columns = implode(", ",array_keys($insData));
$escaped_values = array_map('mysql_real_escape_string', array_values($insData));
$values  = implode(", ", $escaped_values);
$sql = "INSERT INTO `fbdata`($columns) VALUES ($values)";

Hay varias formas diferentes… Le daré un ejemplo de uno que usa declaraciones preparadas:

$prep = array();
foreach($insData as $k => $v ) 
    $prep[':'.$k] = $v;

$sth = $db->prepare("INSERT INTO table ( " . implode(', ',array_keys($insData)) . ") VALUES (" . implode(', ',array_keys($prep)) . ")");
$res = $sth->execute($prep);

Estoy haciendo trampa aquí y asumiendo el keys en tu primera array son los nombres de columna en la tabla SQL. También asumo que tienes PDO disponible. Se puede encontrar más en http://php.net/manual/en/book.pdo.php

Aquí está mi solución completa a esto basada en la respuesta aceptada.

Ejemplo de uso:

include("./assets/php/db.php");
$data = array('field1' => 'data1', 'field2'=> 'data2');
insertArr("databaseName.tableName", $data);

db.php

get_link());
 */
class database
    protected $databaseLink;
    function __construct()
        include "dbSettings.php";
        $this->database = $dbInfo['host'];
        $this->mysql_user = $dbInfo['user'];
        $this->mysql_pass = $dbInfo['pass'];
        $this->openConnection();
        return $this->get_link();
    
    function openConnection()
    $this->databaseLink = mysql_connect($this->database, $this->mysql_user, $this->mysql_pass);
    

    function get_link()
    return $this->databaseLink;
    


/**
 * Insert an associative array into a MySQL database
 *
 * @example
 *    $data = array('field1' => 'data1', 'field2'=> 'data2');
 *    insertArr("databaseName.tableName", $data);
 */
function insertArr($tableName, $insData)
    $db = new database();
    $columns = implode(", ",array_keys($insData));
    $escaped_values = array_map('mysql_real_escape_string', array_values($insData));
    foreach ($escaped_values as $idx=>$data) $escaped_values[$idx] = "'".$data."'";
    $values  = implode(", ", $escaped_values);
    $query = "INSERT INTO $tableName ($columns) VALUES ($values)";
    mysql_query($query) or die(mysql_error());
    mysql_close($db->get_link());

?>

dbSettings.php

 "localhost",
    'user'      => "root",
    'pass'      => "password"
);
?>

valoraciones y reseñas

No se te olvide difundir este post si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *