Error de PDO: “Número de parámetro inválido: parámetro no definido”

Estoy tratando de usar una simple consulta de inserción de MySQL con los parámetros en forma de matriz. Me sigue diciendo que la cantidad de parámetros es incorrecta. He intentado lo siguiente, todos produciendo el mismo error:

$stmt3 = $link->prepare('INSERT INTO messages VALUES(null, :room, :name, :message, :time, :color)'); $stmt3->execute(array(':room' => $Clean['room'],':name' => $Clean['name'],':message' => $Clean['message'],':time' => $time,':color:' => $Clean['color'])); 

y

 $stmt3 = $link->prepare('INSERT INTO messages VALUES(:null, :room, :name, :message, :time, :color)'); $stmt3->execute(array(':null' => null, ':room' => $Clean['room'],':name' => $Clean['name'],':message' => $Clean['message'],':time' => $time,':color:' => $Clean['color'])); 

así como declarar las columnas específicamente para evitar el inserto nulo:

 $stmt3 = $link->prepare('INSERT INTO messages (room, name, message, time, color) VALUES(:room, :name, :message, :time, :color)'); $stmt3->execute(array(':room' => $Clean['room'],':name' => $Clean['name'],':message' => $Clean['message'],':time' => $time,':color:' => $Clean['color'])); 

Esta es la primera vez que uso PDO (normalmente uso mysqli, pero mi host compartido actual no tiene el complemento de mysqlnd, lo que me impide utilizar prepare (), por lo que se agradece cualquier idea desde ese punto de vista.

El problema – y te patearás a ti mismo – es con :color .

La clave de matriz para el valor que está pasando para ese marcador al llamar a execute() se llama :color: Eliminar el final : (Supongo que esto fue solo un error tipográfico de todos modos).

 $stmt3->execute(array( ':room' => $Clean['room'], ':name' => $Clean['name'], ':message' => $Clean['message'], ':time' => $time, ':color' => $Clean['color'], )); 

Podría estar equivocado aquí, pero por lo que sé, necesitas hacer esto:

 $stmt3->bindParam(':room', $Clean['room']); $stmt3->bindParam(':name', $Clean['name']); //and so on 

Pero como preferencia personal, siempre lo he hecho así

 $stmt3 = $link->prepare('INSERT INTO messages VALUES(null, ?, ?, ?, ?, ?)'); $stmt3->execute(array($Clean['room'], $Clean['name'], $Clean['message'], $time, $Clean['color']))