PDO INSERT как отправить в бд

Отправляю axios.post из vue в php данные. В php прилетают, но не отправляются в бд. Но если заранее указать $data, то данные затираются и бд улетает не нужное. Т.е.

    header('Access-Control-Allow-Origin: *');    
    if($_SERVER['REQUEST_METHOD'] == 'POST'){
        
        $data = json_decode(file_get_contents("php://input"), true);
        // всегда считает пустым
        $data =  array(
            ":id" => $data['id'], 
            ":name" => $data['name'], 
            ":phone" => $data['phone'],
            ":body" => $data['body']
        );
        /*
        $data = array(
            ":id" => 123, 
            ":name" => 'name', 
            ":phone" => 'phone',
            ":body" => 'body'
        );*/
        $host = 'localhost';
        $db   = 'posts';
        $user = 'root';
        $pass = '';
        $charset = 'utf8';

        $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
        $opt = [
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_EMULATE_PREPARES   => false,
        ];
        $pdo = new PDO($dsn, $user, $pass, $opt);
        $stmt = $pdo->prepare("INSERT INTO post (id, name, phone, body) VALUES (:id,:name,:phone,:body)");
        $stmt->execute($data);
     
    }

Ответы (0 шт):