我有以下要存储在我的数据库中的数组...
$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,
);
Run Code Online (Sandbox Code Playgroud)
我已经尝试搜索谷歌如何做到这一点,所有我能找到的信息表明我的数组需要拆分,然后插入表中.它是否正确?抱歉天真,非常新的PHP.
Shi*_*dim 90
你无法直接将数组插入mysql,因为mysql不了解php数据类型. Mysql只能理解SQL.因此,要将数组插入mysql数据库,必须将其转换为sql语句.这可以手动完成,也可以通过库完成.输出应该是一个INSERT
声明.
这是一个标准的mysql插入语句.
INSERT INTO TABLE1(COLUMN1, COLUMN2, ....) VALUES (VALUE1, VALUE2..)
Run Code Online (Sandbox Code Playgroud)
如果您的表名称中fbdata
包含列中的列,则可以使用此小片段插入.以下是将数组转换为此语句的方式.
$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)";
Run Code Online (Sandbox Code Playgroud)
PHP7的更新
由于PHP 5.5 mysql_real_escape_string
已被弃用,因此从PHP7开始,它已被删除.请参阅:Php.net有关新过程的文档.
rle*_*mon 16
有许多不同的方法......我将举例说明一个使用预处理语句:
$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);
Run Code Online (Sandbox Code Playgroud)
我在这里作弊,假设你的第一个数组中的键是SQL表中的列名.我也假设你有PDO可用.更多信息可以在http://php.net/manual/en/book.pdo.php找到
就我个人而言,我会对数组进行 json_encode(考虑到任何需要的转义等)并将整个批次放入适当大小的文本/blob 字段中。
它使存储“非结构化”数据变得非常容易,但却是一个真正的 PITA,可以轻松地搜索/索引。
一个简单的 json_decode 会将数据“分解”回数组中。
以下是基于已接受答案的完整解决方案.
用法示例:
include("./assets/php/db.php");
$data = array('field1' => 'data1', 'field2'=> 'data2');
insertArr("databaseName.tableName", $data);
Run Code Online (Sandbox Code Playgroud)
<?PHP
/**
* Class to initiate a new MySQL connection based on $dbInfo settings found in dbSettings.php
*
* @example
* $db = new database(); // Initiate a new database connection
* mysql_close($db->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());
}
?>
Run Code Online (Sandbox Code Playgroud)
<?PHP
$dbInfo = array(
'host' => "localhost",
'user' => "root",
'pass' => "password"
);
?>
Run Code Online (Sandbox Code Playgroud)
小智 5
$columns = implode(", ",array_keys($data));
$escaped_values = array_map(array($con, 'real_escape_string'),array_values($data));
$values = implode("', '", $escaped_values);
return $sql = "INSERT INTO `reservations`($columns) VALUES ('$values')";
Run Code Online (Sandbox Code Playgroud)
这是对 Shiplu Mokaddim 给出的解决方案的改进