Я нахожусь в процессе преобразования некоторого существующего кода в PHP 7 (работает PHP 7.3.9-1). Как часть этого движения я перехожу в PDO. Целевой сервер - MS SQL (2014).
Код:
$target_db_lnk->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$query = "INSERT INTO ship_list (id,active,imo) VALUES (:id,:active,:imo)";
$target_stmt = $target_db_lnk->prepare($query);
$target_stmt->bindParam(':id', intval($fields[0]), PDO::PARAM_INT);
$target_stmt->bindParam(':active', intval($fields[1]), PDO::PARAM_INT);
$target_stmt->bindParam(':imo', intval($fields[3]), PDO::PARAM_INT);
$target_stmt->execute();
Когда я запускаю код, я получаю:
PHP Fatal error: Uncaught PDOException: SQLSTATE [22018]: Недопустимое значение символа для спецификации приведения: 206 [FreeTDS] [SQL Server] Тип операнда clash: текст несовместим с int (SQLExecute [206] в /build/php7.3-ltklYL/php7. 3-7.3.9 / ext / pdo_odbc / odbc_stmt.c: 258)
Определение целевой таблицы:
id int NOT NULL PRIMARY KEY
active int NOT NULL
imo int NOT NULL
Где PDO получает тип «текст»из. Чего мне не хватает?