There isn't anything wrong with the query, except you are using single quotes:
INSERT INTO topics (personID)
SELECT personID FROM persons where personID = 1
If you are using a reserved word in MySQL, you should use a backtick ` (normally next to the 1 on a keyboard) to encompass the name.
See following example:
mysql> select * from test1;
+------+-------+
| id | varry |
+------+-------+
| 1 | aaa |
+------+-------+
1 row in set (0.07 sec)
mysql> select * from test2;
+------+-------+-------+
| id | barry | third |
+------+-------+-------+
| 1 | ccc | NULL |
| NULL | d | 1 |
| NULL | d | 2 |
| NULL | d | 3 |
+------+-------+-------+
4 rows in set (0.00 sec)
mysql> insert into test1 (id) select id from test2 where barry='ccc';
Query OK, 1 row affected (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> insert into test1 ('id') select 'id' from test2 where barry='ccc';
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 ''id')
select 'id' from test2 where barry='ccc'' at line 1
mysql>