JSON到mysql只插入最后一个记录

问题描述:

我试图插入JSON MySQL数据库,我已经成功地访问JSON的每一个元素,但我的代码只插入JSON的最后一个记录,这是我的PHP代码:JSON到mysql只插入最后一个记录

<?php 

$link = mysqli_connect("localhost", "root", "", "Store"); 

if($link === false){ 
    die("ERROR: Could not connect. " . mysqli_connect_error()); 
} 

    $filename = "employee_data.json"; 
$json = file_get_contents($filename); 
$obj = json_decode($json,true); 


    foreach($obj as $item) { 
$sql = "INSERT INTO product (barcodeNumber,name,catName) VALUES ('".$item['name']."', '".$item['designation']."', '".$item['gender']."') "; 

echo $item['name']; 
    } 

if(mysqli_query($link, $sql)){ 
    echo "Records added successfully."; 
} else{ 
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
} 

mysqli_close($link); 
?> 

正如你在我的代码中看到的,我可以打印json的每个名字,但它只插入最后一个!

而且JSON文件 employee_data.json:

[ 
    { 
    "name": "Michael Bruce", 
    "gender": "Male", 
    "designation": "System Architect" 
    }, 
    { 
    "name": "Jennifer Winters", 
    "gender": "Female", 
    "designation": "Senior Programmer" 
    }, 
    { 
    "name": "Donna Fox", 
    "gender": "Female", 
    "designation": "Office Manager" 
    }, 
    { 
    "name": "Howard Hatfield", 
    "gender": "Male", 
    "designation": "Customer Support" 
    }, 
    { 
    "name": "Kevin Sanders", 
    "gender": "Male", 
    "designation": "Food service worker" 
    }, 
    { 
    "name": "Fay K. Whitney", 
    "gender": "Female", 
    "designation": "Bookbinder" 
    }, 
    { 
    "name": "Heather Hernandez", 
    "gender": "Female", 
    "designation": "Corporate recruiter" 

    }, 
    { 
    "name": "Rhonda Okelley", 
    "gender": "Female", 
    "designation": "Image designer" 
    }, 
    { 
    "name": "Sandy Jacobsen", 
    "gender": "Male", 
    "designation": "Publicity agent" 
    }, 
    { 
    "name": "Marisa Williams", 
    "gender": "Female", 
    "designation": "Molder" 
    }, 
    { 
    "name": "Neil Simmons", 
    "gender": "Male", 
    "designation": "Engine and other machine assembler" 
    }, 
    { 
    "name": "Raymond Lara", 
    "gender": "Male", 
    "designation": "Clerical assistant" 
    }, 
    { 
    "name": "William Carpenter", 
    "gender": "Male", 
    "designation": "Broker" 
    }, 
    { 
    "name": "Ted Baer", 
    "gender": "Male", 
    "designation": "Conservation worker" 
    } 
] 

它插入只有最后一条记录:

{ 
     "name": "Ted Baer", 
     "gender": "Male", 
     "designation": "Conservation worker" 
     } 

任何帮助吗?

+0

你叫'mysqli_query(..)'外循环。因此只有最后一个查询被执行。顺便说一句:如果你的代码格式正确,人们可以更容易看到。 –

+0

看看准备好的语句(mysql只解析SQL语句一次)和安全性(“sql注入”,想象添加一个'O'Connor') – clemens321

因为您在循环之后插入记录。试试这个代码:

foreach($obj as $item) { 
    $sql = "INSERT INTO product (barcodeNumber,name,catName) VALUES ('".$item['name']."', '".$item['designation']."', '".$item['gender']."') "; 

    if(mysqli_query($link, $sql)){ 
     echo "Records added successfully."; 
    } else{ 
     echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
    } 
} 

UPDATE

更好的方法是不是插入的每个记录在罗布泊使用批量插入:

$query = "INSERT INTO product (barcodeNumber,name,catName) VALUES " 

foreach($obj as $item) { 
    $query_values[] = "('".$item["name"]."', '".$item["designation"]."', '".$item["gender"]."')"; 
} 

// Implode the query values array with a coma and execute the query. 
$db->query($query . implode(',',$query_values)); 
+1

请使用http://www.php.net/manual/ en/mysqli.real-escape-string.php在查询中使用变量作为字符串时。 – clemens321