Insertar matriz en la base de datos MySQL con PHP
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.
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 INSERT
declaración.
Actualización para PHP7
Desde PHP 5.5
mysql_real_escape_string
ha 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 fbdata
con 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')";
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