У меня есть веб-сайт, предназначенный для студентов-медиков, у меня есть профиль и баллы для каждого студента в моей базе данных, поэтому, когда они участвуют в мероприятии, я должен добавить X баллов для всех участников, и я делаю это вручную, используя Форма ajax, как я могу запустить запрос MySQL, чтобы дать X баллов каждому учащемуся в большом текстовом поле (textarea)? Так что я могу вставить точки сразу, что намного проще и быстрее. Вот пример:

21910431|1|Participant
22010431|3|Subleader
21810531|6|Headleader
(Student ID)|(points)|(role in activity)

Поэтому, когда я заполняю текстовое поле данными выше, он должен вставить 3 записи в таблицу activity_log. Как я могу сразу вставить это в базу данных? Как это:

$query= "INSERT INTO `activity_log` (`Student ID`, `points`, `role`) VALUES (ALL THE VALUES IN THE EXAMPLE ABOVE)";

Если кто-нибудь может помочь, вы можете написать код, чтобы показать мне, как? Большое спасибо!

0
Dr.Jamal 3 Фев 2021 в 23:00

2 ответа

Лучший ответ

Использование PDO:

$lines = explode("\n", $_POST['textarea']); // split into lines
$params = [];
foreach ($lines as $line) {
    if ($line) {  // skip blank lines
        $params += explode('|', $line); // split each line into individual values
    }
}
# Make all the (?, ?, ?) that go after VALUES
$values = implode(',', array_fill(0, count($params)/3, '(?, ?, ?)')); 
$query= "INSERT INTO `activity_log` (`Student ID`, `points`, `role`) VALUES $values";
$stmt = $conn->prepare($query);
$stmt->execute($params);
0
Barmar 3 Фев 2021 в 20:19

Вы можете вставить несколько строк:

INSERT INTO `activity_log` (`Student ID`, `points`, `role`) VALUES (21910431,1,'Participant'),(22010431,3,'Subleader'),...;

Используя заполнители, это будет:

INSERT INTO `activity_log` (?,?,?),(?,?,?),...;

Просто передать все значения для выполнения.

0
ysth 3 Фев 2021 в 20:08
66034816