Wenn du beim prepare()-Aufruf mit Fragezeichen arbeitest, dann dürften die Parameter nicht benannt werden, wie du es jetzt getan hast. Wenn man die Parameter mit Namen ansprechen möchte, muss der Code wie folgt aussehen:
$statement = $pdo->prepare("INSERT INTO user_data.users('nickname', 'eMail', 'password', 'name', 'age', 'sex') VALUES (:nickname, :eMail, :password, :name, :age, :sex)");
$result = $statement->execute(
array(
'nickname' => $nickname,
'eMail' => $eMail,
'password' => $pw_hash,
'name' => $name,
'age' => $age,
'sex' => $sex
)
);
Mit den Fragezeichen so:
$statement = $pdo->prepare("INSERT INTO user_data.users('nickname', 'eMail', 'password', 'name', 'age', 'sex') VALUES (?, ?, ?, ?, ?, ?)");
$result = $statement->execute(array($nickname, $eMail, $pw_hash, $name, $age, $sex));
Steht doch alles in der Dokumentation.
Die Methode heißt bindParam() und nicht bind_param() und du musst jeden Parameter einzeln binden.
https://www.php.net/manual/en/pdostatement.bindparam.php
bind_param() stammt aus der mysqli Bibliothek und nicht aus PDO.
https://www.php.net/manual/de/mysqli-stmt.bind-param.php