なぜセッションオープン機能で準備をしようとしているのですか?書き込み関数がセッション中に2回以上呼び出されるとは思わないので、オープンで準備してもあまり効果はありません。セッションの書き込みでそれを行う方がよいでしょう。
とにかく、テーブル名の後、列リストの前に空白が必要だと思います。空白がないと、mysqlはsession()という名前の存在しない関数を呼び出そうとしているように動作すると思います。
REPLACE INTO session (phpsessid, data) VALUES(?, ?)
興味深いことに、以下をmysql CLIで実行すると、異なる結果が得られるようです。
mysql> select count (*);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '*)' at line 1
mysql> select count(*);
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.00 sec)