Вставить значения массива в MySQL через цикл - PullRequest
0 голосов
/ 04 января 2019

Я читаю через xml файлы с помощью simplexml_load_file. Я пытаюсь перебрать 3 разных XML-файла, а затем вставить значение в базу данных MySQL. Это только вставка последнего массива. Должен ли я использовать цикл while?

Вот мой код:

$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";

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


// Load/read xml files
$id1 = simplexml_load_file('1.xml');
// echo $id1->video[0];

$id2 = simplexml_load_file('2.xml');
// echo $id2->video[0];

$id3 = simplexml_load_file('2.xml');
// echo $id3->video[0];



// make into an array list
$arr = array($id1->video[0], $id2->video[0], $id3->video[0]);

// loop through array and insert into sql database
foreach ($arr as $value) {
    $value = $value;
    $sql = "INSERT INTO videos (username, src, type, position)
    VALUES ('admin', '".$value."', 'vide', '0')";
}

if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();

1 Ответ

0 голосов
/ 04 января 2019

Каждый раз, когда вы выполняете итерацию в foreach, вы перезаписываете переменную $ sql. Поскольку вы выполняете запрос после цикла for, в базу данных вставляется только последний элемент массива.

Чтобы решить эту проблему, вы должны поместить запрос в цикл for:

foreach ($arr as $value) {
    $sql = "INSERT INTO videos (username, src, type, position)
    VALUES ('admin', '".$value."', 'vide', '0')";

    if ($conn->query($sql)) {
       echo "New record created successfully";
    } else {
       echo "Error: " . $sql . "<br>" . $conn->error;
    }
 }

Однако вы должны позаботиться об SQL-инъекции, я рекомендую вам взглянуть на PDO. http://php.net/manual/en/ref.pdo-mysql.php

Позвольте мне преобразовать это в пример PDO:

$sql = "INSERT INTO videos (username, src, type, position ) VALUES ('admin', :value, 'vide', '0')";
if ($stmt = $PDO->prepare($sql)) {
    foreach($arr as $value) {
        $binds['value'] = $value;
        if ($stmt->execute($binds)) {
            echo "Row inserted successfully"
        } 
    }
}

$ PDO будет переменной, в которой хранится выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...