It looks like completely valid MySQL implementation of MySQL Variables within a query. You pre-declare them with your select @row := 0 as an "r" alias. It think the problem is that you are calling the final column name "row" which may be reserved. Just for grins, change to:
@row := @row + 1 as myRow
OR... change your variable from @row to @varRow (variable Row)... or a combination of both...
@varRow := @varRow +1 as myRow
I have no idea who down-voted the answer, but what you are doing is quite normal with MySQL, and I've done it MANY TIMES as can be seen through MANY of my posted answers here at s/o.
I would then try to retrieve the columns by the table FIRST, then the @vars columns... don't know if its something within the engine to get a valid record entry before trying to write the @var...
SELECT
t.*,
@varRow := @varRow + 1 as myRow
FROM
t_persons t,
(SELECT @varRow := 0) r