La declaración preparada no se puede ejecutar varias veces con valores enteros

¿Cómo vuelvo a ejecutar correctamente una declaración preparada usando diferentes valores enteros?

Hay algo mortalmente mal con el enlace explícito e implícitoPDO::PARAM_INT al reutilizar una declaración preparada de ODBC.

CREATE TABLE mytab (
    col INT,
    something VARCHAR(20)
);
Obras: múltiples cuerdas
$pdoDB = new PDO('odbc:Driver=ODBC Driver 13 for SQL Server;
  Server='.DATABASE_SERVER.';
  Database='.DATABASE_NAME,
  DATABASE_USERNAME,
  DATABASE_PASSWORD
);
$pdoDB->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

$values = ['here','are','some','values'];
$sql = "INSERT INTO mytab (something) VALUES (:something)";
$stmt = $pdoDB->prepare($sql);
foreach ($values as $value)
  $stmt->execute(['something'=>$value]);
Obras: entero único
$values = [42];
$sql = "INSERT INTO mytab (col) VALUES (:col)";
$stmt = $pdoDB->prepare($sql);
foreach ($values as $value)
  $stmt->execute(['col'=>$value]);
No funciona: múltiples enteros
$values = [1,3,5,7,11];
$sql = "INSERT INTO mytab (col) VALUES (:col)";
$stmt = $pdoDB->prepare($sql);
foreach ($values as $value)
  $stmt->execute(['col'=>$value]);

En realidad, inserta con éxito el primer registro1 pero falla cuando intenta reutilizar la declaración en la próxima ejecución.

PHP Error grave: PDOException no capturado: SQLSTATE [22018]: Valor de caracteres no válido para la especificación de conversión: 206 [Microsoft] [Controlador ODBC 13 para SQL Server] [SQL Server] Tipo de operando choque: el texto es incompatible con int (SQLExecute [206] en /build/php7.0-lPMnpS/php7.0-7.0.8/ext/pdo_odbc/odbc_stmt.c:260)

Me estoy conectando desde Ubuntu 16.04 de 64 bits con PHP 7.0.8 usando elMicrosoft® ODBC Driver 13 (Vista previa) para SQL Server®

He intentado envolver todo enPDO::beginTransaction yPDO::commit

También he intentado usarPDOStatement::bindParam pero arroja exactamente el mismo error.

Trabajos
$values = [1];
$sql = "INSERT INTO mytab (col) VALUES (:col)";
$stmt = $pdoDB->prepare($sql);
foreach ($values as $value){
  $stmt->bindParam('col', $value, PDO::PARAM_INT);
  $stmt->execute();
}
No funciona
$values = [1,2];
$sql = "INSERT INTO mytab (col) VALUES (:col)";
$stmt = $pdoDB->prepare($sql);
foreach ($values as $value){
  $stmt->bindParam('col', $value, PDO::PARAM_INT);
  $stmt->execute();
}

Creo que es interesante notar que estoy obteniendo exactamente el mismo error que estePregunta sin contestar usando PHP 5.6.9. Sin embargo, no pueden ejecutar ni una sola declaración, por lo que me pregunto si ha habido un parche parcial considerando la línea exacta desde la que se ha movido el error.odbc_stmt.c:254 aodbc_stmt.c:260

Solución alternativa

Si preparo la declaracióndentro el bucle, entoncesFunciona bien. Pero he leído que esto es muy ineficiente y debería poder reutilizar la declaración. Estoy particularmente preocupado por usar esto con conjuntos de datos masivos. ¿Esta bien? ¿Hay algo mejor que pueda hacer?

$values = [1,3,5,7,9,11];
$sql = "INSERT INTO mytab (col) VALUES (:col)";
foreach ($values as $value){
  $stmt = $pdoDB->prepare($sql);
  $stmt->execute(['col'=>$value]);
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta