PHP自帶了一個非常有用的數據類型——數組(Array),它可以將一個或多個數據存儲到一個變量中,并按照鍵值對的形式進行組織。在很多場景下,我們需要將數組中的數據保存到數據庫中,本文就來介紹下PHP數組入庫的方法。
首先,我們需要創建數據庫并建立數據表,這里以用戶信息表為例:
CREATE DATABASE `test`; USE `test`; CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(100) NOT NULL DEFAULT '', `password` varchar(50) NOT NULL DEFAULT '', `email` varchar(100) NOT NULL DEFAULT '', `created_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
接著,我們使用PHP的mysqli擴展來連接數據庫:
$mysqli = new mysqli('localhost', 'root', '123456', 'test'); if ($mysqli->connect_error) { die('Connection failed: ' . $mysqli->connect_error); } mysqli_set_charset($mysqli, "utf8");
現在,我們來看看如何將一個關聯數組(Associative Array)中的數據存儲到數據庫表中:
$user = array( 'username' =>'testuser', 'password' =>'testpassword', 'email' =>'testuser@example.com', 'created_time' =>date('Y-m-d H:i:s') ); $sql = "INSERT INTO `user` (`username`, `password`, `email`, `created_time`) VALUES (?, ?, ?, ?)"; $stmt = $mysqli->prepare($sql); $stmt->bind_param('ssss', $user['username'], $user['password'], $user['email'], $user['created_time']); $stmt->execute(); $stmt->close();
上面的代碼首先定義了一個關聯數組$user,包含了要插入數據庫的用戶信息。然后使用mysqli::prepare方法來創建一個預處理語句,這里我們使用了占位符來代替具體的值,以防止SQL注入等問題。接下來,使用mysqli_stmt::bind_param方法將占位符與實際數值綁定。最后,使用mysqli_stmt::execute方法執行預處理語句并提交到數據庫。
如果我們有多個用戶信息要插入到數據庫中,我們可以使用循環來遍歷數組,將每個用戶信息逐個插入到數據庫中:
$users = array( array( 'username' =>'testuser1', 'password' =>'testpassword1', 'email' =>'testuser1@example.com', 'created_time' =>date('Y-m-d H:i:s') ), array( 'username' =>'testuser2', 'password' =>'testpassword2', 'email' =>'testuser2@example.com', 'created_time' =>date('Y-m-d H:i:s') ) ); $sql = "INSERT INTO `user` (`username`, `password`, `email`, `created_time`) VALUES (?, ?, ?, ?)"; $stmt = $mysqli->prepare($sql); foreach ($users as $user) { $stmt->bind_param('ssss', $user['username'], $user['password'], $user['email'], $user['created_time']); $stmt->execute(); } $stmt->close();
上面的代碼定義了一個二維關聯數組$users,包含了要插入數據庫的多個用戶信息。然后使用循環來遍歷數組,將每個用戶信息逐個插入到數據庫中。
如果我們有多個用戶信息要插入到數據庫中,但是數組結構與數據庫表結構不完全一致,如何處理呢?假設數據庫表中還有一個字段age,但是數組中不包含該字段,我們可以手動為每個用戶信息添加該字段,默認值為0:
$users = array( array( 'username' =>'testuser1', 'password' =>'testpassword1', 'email' =>'testuser1@example.com', 'created_time' =>date('Y-m-d H:i:s') ), array( 'username' =>'testuser2', 'password' =>'testpassword2', 'email' =>'testuser2@example.com', 'created_time' =>date('Y-m-d H:i:s') ) ); $sql = "INSERT INTO `user` (`username`, `password`, `email`, `created_time`, `age`) VALUES (?, ?, ?, ?, ?)"; $stmt = $mysqli->prepare($sql); foreach ($users as $user) { $user['age'] = 0; //手動為每條數據添加age字段 $stmt->bind_param('ssssi', $user['username'], $user['password'], $user['email'], $user['created_time'], $user['age']); $stmt->execute(); } $stmt->close();
上面的代碼在SQL語句中添加了一個age字段,然后在循環中為每條數據手動添加了該字段,最后插入到數據庫中。
最后,我們需要注意的一點是,向數據庫中插入數據時,我們需要認真檢查提交的數據,確保數據格式正確、沒有錯誤或惡意內容,以免造成安全問題。