![](/img/trans.png)
[英]PHP PDO batch insert from multi dimensional array failing to insert into MySQL
[英]Insert batch to MySQL with PHP/PDO
我有一個批量添加域的表單,這些域可以有一個或多個國家和一個語言屬性。
我的表格(簡化為代碼):
添加域:
<textarea name="bulk" rows="10" class="form-control no-resize"><?php echo $_POST['bulk']; ?></textarea>
選擇一個或多個國家:
<div class="checkbox">
<?php
if ($queries->query("SELECT * FROM countrycodes ORDER BY code ASC")) {
if ($queries->count() > 0) {
$contents = $queries->fetchAll();
foreach ($contents as $content) {
?>
<input type="checkbox" id="country_<?php echo $content->code; ?>" name="country[]" value="<?php echo $content->code; ?>" <?php if (in_array($content->code, $_POST['country'])) echo "checked = 'checked'"; ?> />
<label for="country_<?php echo $content->code; ?>"><?php echo $content->country; ?></label><br />
<?php }}} ?>
</div>
選擇語言:
<div class="radio">
<?php
if ($queries->query("SELECT * FROM langcodes ORDER BY code ASC")) {
if ($queries->count() > 0) {
$contents = $queries->fetchAll();
foreach ($contents as $content) {
?>
<input type="radio" name="lang" id="lang_<?php echo $content->code; ?>" value="<?php echo $content->code; ?>" <?php if ($content->code == $_POST['lang']) { ?>checked="" <?php } ?> />
<label for="lang_<?php echo $content->code; ?>"><?php echo $content->language; ?></label><br />
<?php }}} ?>
</div>
從提交中獲取數據:
if (isset($_POST['addData'])) {
$doms = explode("\n", str_replace("\r", "", $_POST['bulk']));
$coun = implode(", ", $_POST['country']);
$lang = $_POST['lang'];
}
我發現這個用於批量插入:
$d = ['Osian', 'Williams', 1];
$data = array_fill(0, 1000, $d);
$db = new PDO('mysql:host=localhost;dbname=MYDB','MYUSER','MYPASS');
$db->beginTransaction();
$stmt = $db->prepare('INSERT INTO members (firstname, surname, title) VALUES (?,?,?)');
for($i=0;$i<count($data);$i++) {
$stmt->execute($data[$i]);
}
$db->commit();
我不知道如何讓我的數據(域、國家、語言)適用於此代碼。
而且,我需要檢查域是否已經在數據庫中,但前提是域具有相同的語言。
所以,能得到一些幫助會很好。
我找到了解決方案。 一開始有點困惑,如何將國家和語言添加到域列表中。 但是國家數據和語言數據是靜態的 - 所以我只需要遍歷域。
這是我的解決方案,它有效:
if (isset($_POST['addData'])) {
$doms = explode("\n", str_replace("\r", "", $_POST['bulk']));
$coun = implode(", ", $_POST['country']);
$lang = $_POST['lang'];
$queries->transStart();
foreach ($doms as $dom) {
if ($queries->query("SELECT domain FROM websites WHERE domain = ? AND lang = ?", [$dom, $lang])) {
if ($queries->count() > 0) {
$infoBox = "error_duplicate";
} else {
$queries->query("INSERT INTO websites (domain, country, lang) VALUES (?,?,?)", [$dom, $coun, $lang]);
$infoBox = "success";
}
}
}
$queries->transStop();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.