如何使用 php 向 mysql 数据库插入多行,增加 1
How to insert multiple, increasing by 1, rows to mysql database with php
我想向我的 SQL 数据库添加 30 行。 table 有 3 列:"Year"、"Month"、"Day"。这些行应添加到 "Day" 列。我使用以下代码,因为我想这样做一次。当我通过 RESTeasy post 它时,我可以在 PHPmyadmin 中看到只添加了 最后一行 ,在这种情况下:“2017”“1”“31”。
// Add days in month
$app->post('/api/calendar/add', function (Request $request, Response $response) {
$year = $request->getParam('Year');
$month = $request->getParam('Month');
$day = $request->getParam('Day');
$day = 1;
while($day < 31) {
$day = $day + 1;
$sql = "INSERT INTO `days` (`Year`, `Month`, `Day`) VALUES ('2017', '1', '$day')";
};
try {
// Get DB Object
$dbcalendar = new dbcalendar();
// Connect
$dbcalendar = $dbcalendar->connect();
$stmt = $dbcalendar->prepare($sql);
$stmt->bindParam(':Year', $year);
$stmt->bindParam('Month', $month);
$stmt->bindParam('Day', $day);
$stmt->execute();
echo '{"notice": {"text": "Days Added"}';
} catch(PDOException $e) {
echo '{"error": {"text": '.$e->getMessage().'}';
}
您需要将 try catch
移入 while
// Add days in month
$app->post('/api/calendar/add', function (Request $request, Response $response) {
$year = $request->getParam('Year');
$month = $request->getParam('Month');
$day = $request->getParam('Day');
$day = 1;
while($day < 31) {
$day = $day + 1;
$sql = "INSERT INTO `days` (`Year`, `Month`, `Day`) VALUES ('2017', '1', '$day')";
try {
// Get DB Object
$dbcalendar = new dbcalendar();
// Connect
$dbcalendar = $dbcalendar->connect();
$stmt = $dbcalendar->prepare($sql);
$stmt->bindParam(':Year', $year);
$stmt->bindParam('Month', $month);
$stmt->bindParam('Day', $day);
$stmt->execute();
echo '{"notice": {"text": "Days Added"}';
} catch(PDOException $e) {
echo '{"error": {"text": '.$e->getMessage().'}';
}
};
});
您的 $sql
变量在每次执行 while
循环时都会被覆盖。因此,执行 31 次后,它看起来像:
INSERT INTO `days` (`Year`, `Month`, `Day`) VALUES ('2017', '1', '31')
我至少可以想到两种不同的方法来解决这个问题:
要么将你的 try...catch
声明放在你的 while
中。这样,每次构建request,就执行。
或者将您的 $sql
var 转换为数组并将每个值添加为一个新条目,然后 implode
它。这样,您将有一个 SQL 请求和执行:
$sql_array = array();
while($day < 31) {
$day = $day + 1;
$sql_array[] = "('2017', '1', '$day')";
};
$sql = 'INSERT INTO `days` (`Year`, `Month`, `Day`) VALUES ' . implode(', ', $sql_array);
虽然第一种方法可能更容易理解,但第二种方法肯定需要更少的资源并且执行时间更短。
我想向我的 SQL 数据库添加 30 行。 table 有 3 列:"Year"、"Month"、"Day"。这些行应添加到 "Day" 列。我使用以下代码,因为我想这样做一次。当我通过 RESTeasy post 它时,我可以在 PHPmyadmin 中看到只添加了 最后一行 ,在这种情况下:“2017”“1”“31”。
// Add days in month
$app->post('/api/calendar/add', function (Request $request, Response $response) {
$year = $request->getParam('Year');
$month = $request->getParam('Month');
$day = $request->getParam('Day');
$day = 1;
while($day < 31) {
$day = $day + 1;
$sql = "INSERT INTO `days` (`Year`, `Month`, `Day`) VALUES ('2017', '1', '$day')";
};
try {
// Get DB Object
$dbcalendar = new dbcalendar();
// Connect
$dbcalendar = $dbcalendar->connect();
$stmt = $dbcalendar->prepare($sql);
$stmt->bindParam(':Year', $year);
$stmt->bindParam('Month', $month);
$stmt->bindParam('Day', $day);
$stmt->execute();
echo '{"notice": {"text": "Days Added"}';
} catch(PDOException $e) {
echo '{"error": {"text": '.$e->getMessage().'}';
}
您需要将 try catch
移入 while
// Add days in month
$app->post('/api/calendar/add', function (Request $request, Response $response) {
$year = $request->getParam('Year');
$month = $request->getParam('Month');
$day = $request->getParam('Day');
$day = 1;
while($day < 31) {
$day = $day + 1;
$sql = "INSERT INTO `days` (`Year`, `Month`, `Day`) VALUES ('2017', '1', '$day')";
try {
// Get DB Object
$dbcalendar = new dbcalendar();
// Connect
$dbcalendar = $dbcalendar->connect();
$stmt = $dbcalendar->prepare($sql);
$stmt->bindParam(':Year', $year);
$stmt->bindParam('Month', $month);
$stmt->bindParam('Day', $day);
$stmt->execute();
echo '{"notice": {"text": "Days Added"}';
} catch(PDOException $e) {
echo '{"error": {"text": '.$e->getMessage().'}';
}
};
});
您的 $sql
变量在每次执行 while
循环时都会被覆盖。因此,执行 31 次后,它看起来像:
INSERT INTO `days` (`Year`, `Month`, `Day`) VALUES ('2017', '1', '31')
我至少可以想到两种不同的方法来解决这个问题:
要么将你的 try...catch
声明放在你的 while
中。这样,每次构建request,就执行。
或者将您的 $sql
var 转换为数组并将每个值添加为一个新条目,然后 implode
它。这样,您将有一个 SQL 请求和执行:
$sql_array = array();
while($day < 31) {
$day = $day + 1;
$sql_array[] = "('2017', '1', '$day')";
};
$sql = 'INSERT INTO `days` (`Year`, `Month`, `Day`) VALUES ' . implode(', ', $sql_array);
虽然第一种方法可能更容易理解,但第二种方法肯定需要更少的资源并且执行时间更短。