2017-10-17 6 views
0

ich versuche JSON MYSQL Datenbank einzufügen, i erfolgreich jedes Element von json Zugriff haben, aber mein Code ist nur der letzte Datensatz von json einfügen, hier ist mein PHP-Code:json mysql nur letzte Datensatz eingefügt

<?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); 
?> 

Wie Sie in meinem Code sehen, kann ich jeden Namen von Json drucken, aber es ist nur die letzte einfügen!

Und die JSON-Datei employee_data.json:

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

Jede Hilfe:

[ 
    { 
    "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" 
    } 
] 

es nur der letzte Datensatz einfügt?

+0

Sie rufen 'mysqli_query (..)' außerhalb der Schleife . Somit wird nur die letzte Abfrage ausgeführt. BTW: Man sieht das viel einfacher, wenn Sie Ihren Code richtig formatieren. –

+0

Werfen Sie einen Blick auf vorbereitete Anweisungen für die Leistung (mysql analysieren die SQL-Anweisung nur einmal) und Sicherheit ("sql injection", stellen Sie sich ein "O'Connor") – clemens321

Antwort

0

Weil Sie die Datensätze nach der Schleife einfügen. versuchen, diesen Code:

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

besseren Ansatz statt jeden Datensatz in einem Lop Verwendung bulk Einsatz Einfügen:

$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

Bitte verwenden Sie http://www.php.net/manual/ de/mysqli.real-escape-string.php bei Verwendung von Variablen als Strings in einer Abfrage. – clemens321

Verwandte Themen