2017-02-20 9 views
2

Ich versuche zu lernen, wie Sie ein Array verwenden, um mehrere Einträge in eine Datenbanktabelle einzufügen. Das war mein Versuch. Was mache ich falsch?Array in DB-Tabelle einfügen

$servername = "localhost"; 
$username = "#"; 
$password = "#"; 
$dbname = "hosts"; 
$conn = new mysqli($servername, $username, $password, $dbname); 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
$client = array(
    "1" => array("Jerry Garcia", "193.169.5.11"), 

    "2" => array("Bill Graham", "193.169.5.12"), 

    "3" => array("Arlo Guthrie", "193.169.5.13") 
    ); 

if(is_array($client) { 
    $DataArr = array(); 
    foreach($client as $row) { 
     $fieldVal1 = mysqli_real_escape_string($client[$row][1]); 
     $fieldVal2 = mysqli_real_escape_string($client[$row][2]); 
     $fieldVal3 = mysqli_real_escape_string($client[$row][3]); 

     $DataArr[] = "('fieldVal1', 'fieldVal2', 'fieldVal3')"; 

    } 

    $sql = "INSERT INTO ip_data (field1, field2, field3) values "; 
    $sql .= implode(',' , $DataArr); 

    mysqli_query($conn, $query); 
} 

Ich habe das versucht, aber es funktioniert immer noch nicht. Was vermisse ich?

$servername = "localhost"; 
$username = "#"; 
$password = "#"; 
$dbname = "hosts"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
$client = array(
    "0" => array("Jerry Garcia"), 

    "1" => array(""193.169.5.11"), 
    ); 

if(is_array($client)) { 
    $DataArr = array(); 
    foreach($client as $row) { 
     $fieldVal1 = mysqli_real_escape_string($client[$row][0]); 
     $fieldVal2 = mysqli_real_escape_string($client[$row][1]); 


     $DataArr[] = "('$fieldVal1', '$fieldVal2')"; 

    } 

    $sql = "INSERT INTO ip_data (field1, field2) values "; 
    $sql .= implode(',' , $DataArr); 

    mysqli_query($conn, $query); 
} 

Vielen Dank für Ihren Rat.

Nächster Versuch.

$servername = "localhost"; 
$username = "#"; 
$password = "#"; 
$dbname = "hosts"; 

$conn = new mysqli($servername, $username, $password, $dbname); 

if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
$client = array(
    "0" => array("name" => "Peter Maxx", "ip" => "193.169.5.16"), 
    "1" => array("name" => "Ravi Shankar", "ip" => "193.169.5.17") 
    ); 

if(is_array($client)) { 
     $DataArr = array();   
     foreach($client as $row) { 

      $DataArr[] = "('". mysqli_real_escape_string($conn, $row[0]) ."', '". mysqli_real_escape_string($conn, $row[1]) ."')"; 
     } 
     $sql = "INSERT INTO ip_data (name, ip) 
VALUES 
('Peter Maxx', '193.169.5.16'), 
('Ravi Shankar', '193.169.5.17')"; 
     $sql .= implode(", " , $DataArr); 
     mysqli_query($conn, $sql); 

} 

Ich bekomme diese Fehlermeldungen.

PHP Notice: Undefined offset: 0 in php shell code on line 5 
PHP Notice: Undefined offset: 1 in php shell code on line 5 
PHP Notice: Undefined offset: 0 in php shell code on line 5 
PHP Notice: Undefined offset: 1 in php shell code on line 5 
+0

Blick https://www.w3schools.com/sql/sql_insert.asp - Ihre Werte sollten in() –

+0

@AlexeyShatrov sein - er beabsichtigt, zu , aber falsch. Siehe die Antwort. –

Antwort

0

Es ist unklar, was Ihr Ziel ist es, da die SQL-Abfrage in Ihrer Frage 3 Felder angeben (Feld1, Feld2, field3) zu sein eingefügt in Ihre Tabelle, aber Sie haben nur 2 Werte in Ihrem Client-Array. Wenn Sie mehrere Zeilen in einer einzigen Abfrage einfügen möchten, können für den „Namen“ sagen und „ip“ Wert in Ihren Kunden Array, können Sie dies tun:

if(is_array($client)) { 
     $DataArr = array();   
     foreach($client as $row) { 
      //CREATE ARRAY WITH name AND ip VALUES FOR EACH USER...    
      $DataArr[] = "('". mysqli_real_escape_string($conn, $row[0]) ."', '". mysqli_real_escape_string($conn, $row[1]) ."')"; 
     } 
     $sql = "INSERT INTO ip_data (name, ip) VALUES "; 
     $sql .= implode(", " , $DataArr); 
     mysqli_query($conn, $sql); 
    } 

Die $ SQL-Variable wird die folgende Abfrage enthalten kompatibel mit der Syntax für eine Mehrfacheinsatz:

INSERT INTO ip_data (name, ip) 
VALUES ('Jerry Garcia', '193.169.5.11'), 
     ('Bill Graham', '193.169.5.12'), 
     ('Arlo Guthrie', '193.169.5.13') 

Beachten Sie, dass Sie haben $query statt $slq in Ihrer Frage. Es sollte sein: mysqli_query($conn, $sql);.

Eine andere Sache: Mit mysqli_real_escape_string() den prozeduralen Weg anstelle des object oriented way, wie in Ihrem Beispiel eine Verbindungs-Kennung auf die Verbindung als Parameter übergeben müssen: mysqli_real_escape_string($conn, $row[0])

UPDATE: In Ihrem letzten Versuch Sie geändert haben die Array auf ein assoziatives Array, so dass dies sollte es tun:

$servername = "localhost"; 
$username = "#"; 
$password = "#"; 
$dbname = "hosts"; 

$conn = new mysqli($servername, $username, $password, $dbname); 

if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
$client = array(
    "0" => array("name" => "Peter Maxx", "ip" => "193.169.5.16"), 
    "1" => array("name" => "Ravi Shankar", "ip" => "193.169.5.17") 
); 

if(is_array($client)) { 
    $DataArr = array();   
    foreach($client as $row) { 

     $DataArr[] = "('". mysqli_real_escape_string($conn, $row["name"]) ."', '". mysqli_real_escape_string($conn, $row["ip"]) ."')"; 
    } 
    $sql = "INSERT INTO ip_data (name, ip) VALUES "; 
    $sql .= implode(", " , $DataArr); 
    mysqli_query($conn, $sql); 

} 
+0

Danke, Michael! Das sieht gut aus. Ich werde diese Änderungen vornehmen, sobald ich an meinen Schreibtisch zurückkomme. Das wird sehr geschätzt! –

+0

Hallo Michael. Anscheinend mache ich immer noch etwas falsch. Siehe meine obigen Änderungen. –

+0

@ S.VanTuyl Sie haben das Array in ein assoziatives Array geändert, also ändern Sie '$ row [0]' in '$ row [" name "]' und '$ row [1]' in '$ row [" ip " ] 'Ich habe meine Antwort mit einem Arbeitsbeispiel aktualisiert. –

1

Bitte append ein bis $DataArr[] Um dies zu ändern:

$DataArr[] = "('$fieldVal1', '$fieldVal2', '$fieldVal3')"; 
0

Correct

Von

if(is_array($client) { 

Um

if(is_array($client)){ 

Und Ihr Array $client nur zwei Elemente in jeder Iteration

Von

# You will get PHP Warning: Illegal offset type 
    # since $row is already array 

    $fieldVal1 = mysqli_real_escape_string($client[$row][1]); 
    $fieldVal2 = mysqli_real_escape_string($client[$row][2]); 
    $fieldVal3 = mysqli_real_escape_string($client[$row][3]); 

zu

// For first iteration 
    // $row[0] = "Jerry Garcia" 
    // $row[1] = "193.169.5.11" 

    $fieldVal1 = mysqli_real_escape_string($conn, $row[0]); 
    $fieldVal2 = mysqli_real_escape_string($conn, $row[1]); 

    // $row[3] does not exists so comment it and set $fieldVal3 some data 
    // $row[3] not exists in your array and even $row[2] 
    // or add one value to your $client array and access using $row[2] 
    // $fieldVal3 = mysqli_real_escape_string($row[3]); 

    $fieldVal3 ='somedata'; 

und schließlich

0 haben

Von

$DataArr[] = "('fieldVal1', 'fieldVal2', 'fieldVal3')"; 

Um

$DataArr[] = "('$fieldVal1', '$fieldVal2', '$fieldVal3')"; 
+0

Ich habe das versucht, aber es funktioniert immer noch nicht. –

+0

@ S.VanTuyl: Ich bearbeitet bitte lesen Sie, wo alles, was Sie brauchen Korrektur –

+0

@ S.VanTuyl: In Ihrer neuesten Bearbeitung, wie Sie sehen können Array ("Jerry Garcia") 'enthält 1 Wert, aber Sie versuchen, 2 Werte einzufügen '" ('$ fieldVal1', '$ fieldVal2') "', wie ist das möglich? –