简体   繁体   English

PHP:将多个数组插入mysql表

[英]PHP: Inserting Multiple array into mysql table

I am testing multiple array insertion into my table, I have try all what I could but I am not getting.Here is my code: 我正在测试向表中插入多个数组,我已经尽力而为,但是没有得到,这是我的代码:

<?php

    ini_set('display_errors',1);
    //ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);

                    $mysqli = new mysqli(HOST,USER,PASS,DB);
                     $message = array();    

                    $id =1;
                    $SocialHandle = "Facebook,Twitter,LinkIn";
                    $SociaUrl ="Url1,Url2,Url3";

                    $strSocialHandle = explode(',', $SocialHandle); 
                    $strSociaUrl = explode(',', $SociaUrl); 
                    print_r($strSocialHandle);
                    print_r($strSociaUrl);
                    $sql = "INSERT INTO `social_table`(`id`, `social_handle`, `handle_url`) VALUES";
                    foreach($strSocialHandle as $SocialNameValue){                                      
                    $sql .= "({$id}, '{$SocialNameValue}','{$strSociaUrl}'),";              
                    }
                    $sql = rtrim($sql, ',');
                    $result = $mysqli->query($sql);

                    if (!$result){
                            $message = array('Message' => 'insert fail or record exist');
                            echo json_encode($message);         
                    }else{             
                            $message = array('Message' => 'new record inserted');
                            echo json_encode($message);   
                    }
?>

Here is my goal achievement: 这是我的目标成就:

ID social handle handle url ID社交句柄句柄url
1 Facebook url1 1个Facebook网址1
1 Twitter url2 1个Twitter网址2
1 LinkIn url3 1个LinkIn url3

Please help. 请帮忙。

You can use for loop for it as 您可以使用for循环作为

$id =1;
$SocialHandle = "Facebook,Twitter,LinkIn";
$SocialHandle = explode(",", $SocialHandle);
$SociaUrl = "Url1,Url2,Url3";
$SociaUrl = explode(",", $SociaUrl);

$sql = "INSERT INTO `social_table`(`id`, `social_handle`, `handle_url`) VALUES";
for ($i = 0; $i < count($SocialHandle); $i++) {
    $sql .= "({$id}, '$SocialHandle[$i]','$SociaUrl[$i]'),";
}


$sql = rtrim($sql, ',');
echo $sql;
$result = $mysqli->query($sql);

OUTPUT 输出值

INSERT INTO social_table ( id , social_handle , handle_url ) VALUES(1, 'Facebook','Url1'),(1, 'Twitter','Url2'),(1, 'LinkIn','Url3') 插入到social_tableidsocial_handlehandle_url )值(1,'Facebook','Url1'),(1,'Twitter','Url2'),(1,'LinkIn','Url3')

DEMO 演示

UPDATED 更新

Better use prepare and bind statement to prevent form sql injection as 更好地使用prepare和bind语句来防止sql注入

for ($i = 0; $i < count($SocialHandle); $i++) {
    $sql = "INSERT INTO `social_table`(`id`, `social_handle`, `handle_url`) VALUES (?,?,?)";
    $stmt = $mysqli->prepare($sql);
    $stmt->bind_param('iss', $id, $SocialHandle[$i], $SociaUrl[$i]);
    $stmt->execute();
}

You're only looping over $strSocialHandle - the $strSociaUrl array isn't affected by the loop, so will still be an array rather than an individual value. 您只循环$strSocialHandle $strSociaUrl数组不受循环影响,因此仍将是数组而不是单个值。 You can store the two lists in a single key-value array, and use one loop to iterate over both: 您可以将两个列表存储在单个键值数组中,并使用一个循环遍历两个列表:

<?php
$id = 1;

$social = [
    'Facebook' => 'Url1',
    'Twitter'  => 'Url2',
    'LinkIn'   => 'Url3',
];


$sql = "INSERT INTO `social_table`(`id`, `social_handle`, `handle_url`) VALUES";

foreach($social as $handle => $url) {
    $sql .= "({$id}, '{$handle}','{$url}'),";
}

echo rtrim($sql, ',');

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM