Я пытаюсь сделать многострочную INSERT для каждого дня данного месяца / года.
Если цикл выполняется только один раз, все работает, как и ожидалось.Если он запускается 2 или более раз, он выдает следующую ошибку:
SQLSTATE [22018]: недопустимое значение символа для спецификации приведения: 206 [Microsoft] [драйвер ODBC SQL Server] [операнд SQL Server]Тип clash: текст несовместим с датой (SQLExecute [206] в ext \ pdo_odbc \ odbc_stmt.c: 260)
Это также работает, если я не подготовил дату.Я в растерянности ... я делаю что-то не так?Это мой код:
$query = "INSERT INTO scp.schedule
(record_create_date, associate_id, scheduled_date, shift_id, is_weekend)
VALUES ";
for ($day_count = 1; $day_count <= $days_month; $day_count++)
{
$day_count = sprintf("%02d", $day_count);
$full_date = $year . "-" . $month . "-" . $day_count;
// Check if date is weekend
$weekend = (date("N", strtotime($full_date)) < 6) ? 0 : 1;
$query .= "(GETDATE(), ?, ?, ?, ?), ";
$params[] = $associate["associate_id"];
$params[] = $full_date;
$params[] = $shifts[0]["shift_id"];
$params[] = $weekend;
}
// Remove the last comma and space
$query = substr($query, 0, -2);
$stmt = $db->prepare($query);
$stmt->execute($params);
Я использую SQL Server версии 12+ и PHP версии 7+.Тип столбца в БД - ДАТА.
РЕДАКТИРОВАТЬ:
Это работает
INSERT INTO scp.schedule
(record_create_date, associate_id,
scheduled_date, shift_id, is_weekend)
VALUES (GETDATE(), ?, ?, ?, ?)
Это не
INSERT INTO scp.schedule
(record_create_date, associate_id,
scheduled_date, shift_id, is_weekend)
VALUES (GETDATE(), ?, ?, ?, ?),
(GETDATE(), ?, ?, ?, ?)
РЕДАКТИРОВАТЬ 2:
Некоторые тесты и ошибки, которые они выбрасывают.Я также пытался использовать '?'
.
$query .= "(GETDATE(), ?, DATEFROMPARTS(?, ?, ?), ?, ?), ";
// Also tried intval() and casting to int
$params[] = $year;
$params[] = $month;
$params[] = $day_count;
SQLSTATE [22018]: недопустимое значение символа для спецификации приведения: 206 [Microsoft] [Драйвер ODBC SQL Server] [SQL Server] Тип операндаclash: текст несовместим с int (SQLExecute [206] в ext \ pdo_odbc \ odbc_stmt.c: 260)
$query .= "(GETDATE(), ?, CONVERT(date, ?), ?, ?), ";
SQLSTATE [22018]: недопустимое значение символа для спецификации приведения:529 [Microsoft] [Драйвер ODBC SQL Server] [SQL Server] Явное преобразование текста типа данных в дату недопустимо.(SQLExecute [529] в ext \ pdo_odbc \ odbc_stmt.c: 260)