[英]How can I store data from an array into the mySQL database?
我想將數據從數組存儲到數據庫中。
這就是我執行print_r($animals);
時的數組外觀print_r($animals);
:
Array
(
[0] => Array
(
[animal] => Cat
[name] => Tom
)
[1] => Array
(
[animal] => Dog
[name] => Bob
)
[2] => Array
(
[animal] => Bird
[name] => Sam
)
[3] => ....
這是我嘗試存儲數據的方式,但是由於某種原因它不起作用,因此什么也沒有存儲:
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO animals (animal,name) values(?,?) ";
$q = $pdo->prepare($sql);
foreach($animals as $row) {
$q->execute(array(
$row['animal'],
$row['name'],));
}
Database::disconnect();
例如,如果我寫以下內容,則表示存儲有效,但是僅存儲了第一個條目(Cat和Tom)
foreach($animals as $row) {
$name = $row['name'];
$animal = $row['animal'];
}
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO animals (animal,name) values(?,?) ";
$q = $pdo->prepare($sql);
$q->execute(array($animal,$name));
Database::disconnect();
您的第一次嘗試更有意義。 請記住,您只需prepare
一次參數化語句,然后只要您每次替換參數,便可以運行1000次。
同樣,當您將PDO設置為在錯誤時發出異常時,應在Try / Catch塊中對此進行編碼
try {
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO animals (animal,name) values(?,?) ";
$q = $pdo->prepare($sql);
foreach($animals as $row) {
$q->execute(array($row['animal'], $row['name']));
}
}
catch (PDOException $pe) {
echo $pe->getMessage();
}
catch (Exception $e ) {
echo $e->getMessage();
}
Database::disconnect();
像這樣修改您的代碼,它將起作用。
$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
foreach($animals as $row) {
$sql = "INSERT INTO animals (animal,name) values($row['animal'], $row['name']) ";
$q = $pdo->prepare($sql);
$q->execute();
}
Database::disconnect();
我不能很好地解釋它,但是我知道CodeIgniter框架以這種方式將PDO用於SQL執行。
第一個語法錯誤用逗號隔開:
foreach($animals as $row) {
$q->execute(array(
$row['animal'],
$row['name'],));//extra comma
}
第二個是您在頂部覆蓋了變量的循環。 這意味着它將插入最后一行。
因此,請刪除其中的逗號或使用for循環:
for($i=0; $i< count($animals); $i++) {
$q->execute(array(
$animals[$i]['animal'],
$animals[$i]['name']));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.