Вы выполняете подготовленный оператор с именованными заполнителями. Таким образом, вам необходимо удалить кавычки из ваших заполнителей, в противном случае они обрабатываются как значения для соответствующих столбцов и обновляются напрямую.
Чтобы быть последовательным, я предпочитаю использовать ключи массива: on:
$data = array(':a' => 'John', ':b' => 'OK');
$st=$dbh->prepare("insert into mytable (a, b) values(:a, :b)");
Вы также можете выполнить подготовленный оператор с заполнителями вопросительного знака:
$data = array(
array('John','OK'),
);
$st=$dbh->prepare("insert into mytable (a, b) values(?, ?)");
$st->execute($data) or print_r($st->errorInfo());