Я получаю данные API, которые я должен хранить в базе данных. Я должен использовать цикл, потому что я не могу знать, сколько предметов клиент поставит в корзину. Для получения дополнительной информации, пожалуйста, посмотрите мой пример. Зависит от цикла. Мне удается сохранить только первый или последний элемент... Любая помощь будет оценена.
<?php
$data = array
(
array("Item1"),
array("Item2"),
array("Item3"),
array("Item4"),
);
$count = count($data);
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
$x = 0;
while($x <= $count-1) {
$mytest = $data[$x][0];
echo $mytest;
$sql = "INSERT INTO test (mytest)
VALUES ('$mytest')";
$x++;
}
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
Цикл foreach всегда лучше, чем при повторении массива.
Конструкция foreach обеспечивает простой способ перебора массивов. foreach работает только с массивами и объектами и выдает ошибку при попытке использовать ее для переменной с другим типом данных или неинициализированной переменной. Существует два синтаксиса:
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement
Решение вашей проблемы:
foreach($data as $val) {
echo $val;
$sql = "INSERT INTO test (mytest) VALUES ('$mytest')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
mysqli
вы должны использовать параметризованные запросы иbind_param
для добавления пользовательских данных в ваш запрос. НЕ используйте интерполяцию или конкатенацию строк для достижения этой цели, поскольку вы создали серьезную ошибку внедрения SQL . НИКОГДА не помещайте$_POST
,$_GET
или любые пользовательские данные непосредственно в запрос, это может быть очень вредно, если кто-то попытается использовать вашу ошибку.$sql3
вместо визуально подобного$sql8
.