我想在我的SQL数据库中添加30行。该表有3列:“年”,“月”,“日”。行应添加到“日”列。我使用以下代码,因为我想要一次。当我通过RESTeasy发布时,我可以在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().'}';
}
答案 0 :(得分:0)
您需要将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().'}';
}
};
});
答案 1 :(得分:0)
在$sql
循环的每次执行中,您的while
变量都被覆盖。因此,在执行31次后,它看起来像:
INSERT INTO `days` (`Year`, `Month`, `Day`) VALUES ('2017', '1', '31')
我可以想到至少两种不同的方法来解决这个问题:
将try...catch
声明放在while
内。这样,每次构建请求时,都会执行它。
或者将您的$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);
虽然第一种方法可能更容易理解,但第二种方法肯定需要更少的资源并且执行时间更短。