Insertar matriz en la base de datos MySQL con PHP

Resuelto Liam asked hace 54 años • 22 respuestas

Tengo la siguiente matriz que quiero almacenar en mi base de datos...

$insData = array(
    'uid' => $fbme['id'],
    'first_name' => $fbme['first_name'],
    'last_name' => $fbme['last_name'],
    'email' => isset($fbme['email']) ? $fbme['email'] : '',
    'link' => $fbme['link'],
    'affiliations' => $networks,
    'birthday' => $info[0]['birthday_date'],
    'current_location' => isset($fbme['location']['name']) ? $fbme['location']['name'] : '',
    'education_history' => $education,
    'work' => $workInfo,
    'hometown_location' => isset($fbme['hometown']['name']) ? $fbme['hometown']['name'] : '',
    'interests' => $info[0]['interests'],
    'locale' => $info[0]['locale'],
    'movies' => $movies,
    'music' => $music,
    'political' => $info[0]['political'],
    'relationship_status' => $info[0]['relationship_status'],
    'sex' =>  isset($fbme['gender']) ? $fbme['gender'] : '',
    'tv' => $television,
    'status' => '0',
    'created' => $now,
    'updated' => $now,
);

Intenté buscar en Google cómo hacer esto y todo lo que puedo encontrar es información que indica que mi matriz debe dividirse antes de insertarla en la tabla. ¿Es esto correcto? Perdón por la ingenuidad, soy muy nuevo en php.

Liam avatar Jan 01 '70 08:01 Liam
Aceptado

No puede insertar una matriz directamente en MySQL ya que MySQL no comprende los tipos de datos PHP . MySQL solo entiende SQL . Entonces, para insertar una matriz en una base de datos MySQL, debe convertirla en una declaración SQL. Esto se puede hacer manualmente o mediante una biblioteca. El resultado debe ser una INSERTdeclaración.

Actualización para PHP7

Desde PHP 5.5 mysql_real_escape_stringha quedado obsoleto y a partir de PHP7 se ha eliminado . Consulte: 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 tiene una tabla con nombre fbdatacon las columnas que se presentan en las claves de su matriz, puede insertarla con este pequeño fragmento. Así es como se convierte su matriz a esta declaración.

$columns = implode(", ",array_keys($insData));
$link = mysqli_connect($url, $user, $pass,$db);
$escaped_values = array_map(array($link, 'real_escape_string'), array_values($insData));

$values  = implode("', '", $escaped_values);
$sql = "INSERT INTO `fbdata`($columns) VALUES ('$values')";
Shiplu Mokaddim avatar Apr 07 '2012 12:04 Shiplu Mokaddim

Hay varias formas diferentes... Le daré un ejemplo de una que utiliza 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 que las claves de su primera matriz son los nombres de las columnas en la tabla SQL. También supongo que tienes DOP disponible. Puede encontrar más información en http://php.net/manual/en/book.pdo.php

rlemon avatar Apr 07 '2012 13:04 rlemon