La sentencia está bien (creo) además estoy llamando a datos {$datos['apartado']} pq 'apartado' es una variable del array $datos y $apartado por si sólo, no tiene ningún valor, a no ser que hiciera:
{$datos['apartado']}=$apartado;
Además en ese mismo script hay otra sentencia similar pero con un update y funciona perfectamente, la única diferencia entre ambas es lo que ya comenté antes que en la que no funciona está esta sentencia por el medio:
header("location: insertar.php?envia_datos=$url");
y parece que el array $envia_datos no está llegando a su destino (y por lo tanto no hay datos que introducir en la BD), quizás esta forma de pasar variables sólo sea válida a partir de cierta versión del php, (o si
).
De todos modos probaré lo que dices, y muchas gracias por responder, ya postearé si esa era la solución.