Вставить массив в таблицу БД

Я пытаюсь узнать, как использовать массив для вставки нескольких записей в таблицу базы данных. Это была моя попытка. Что я делаю неправильно?

$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);
}

Я попробовал это, но это все еще не работает. Что мне не хватает?

$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);
}

Спасибо за совет.

Следующая попытка

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

}

Я получаю эти сообщения об ошибках.

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

3

Решение

Неясно, какова ваша цель, поскольку в вашем вопросе SQL указывается 3 поля (field1, field2, field3), которые нужно вставить в вашу таблицу, но в вашем массиве клиентов есть только 2 значения. Если вы хотите вставить несколько строк в одном запросе, скажем, для значений «name» и «ip» в вашем массиве клиентов, вы можете сделать это:

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

Переменная $ sql будет содержать следующий запрос, совместимый с синтаксисом множественной вставки:

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')

Обратите внимание, что у вас есть $query вместо $slqв вашем вопросе. Так должно быть: mysqli_query($conn, $sql);,

Еще одна вещь: использование mysqli_real_escape_string() процессуальный путь вместо объектно-ориентированный путь, как в вашем примере, требуется передать идентификатор ссылки на соединение в качестве параметра: mysqli_real_escape_string($conn, $row[0])

ОБНОВИТЬ:
В вашей последней попытке вы изменили массив на ассоциативный массив, так что это должно сделать это:

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

}
1

Другие решения

Пожалуйста, измените приложение к $DataArr[] к этому:

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

Правильный

От

   if(is_array($client) {

к

   if(is_array($client)){

И ваш массив $client будет иметь только 2 элемента в каждой итерации

От

    # 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]);

в

    // 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';

и наконец

От

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

к

 $DataArr[] = "('$fieldVal1', '$fieldVal2', '$fieldVal3')";
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector