Attaching Player Labels doesn't need a seperate function.
CreatePlayer3DTextLabel already has the "attachedplayer" argument:
Code:
native PlayerText3D:CreatePlayer3DTextLabel(playerid, text[], color, Float:X, Float:Y, Float:Z, Float:DrawDistance, attachedplayer=INVALID_PLAYER_ID, attachedvehicle=INVALID_VEHICLE_ID, testLOS=0);
In your code you already set attachedplayer and attachedvehicle to 0. You also set draw_distance to 0 which makes the label invisible at all times.
Another thing is that attaching a per-player label to the player it's created for is useless.
Noone else can see it since it is per-player, and the player which it is created for also cannot see it (you can never see labels attached to yourself)!
If you want this label to be visible to everyone else use a global label, then attach it to the player like suggested already.
Make sure to not use 0.0 for draw_distance...