Cytat(Marcinekk @ 20.06.2015, 19:50:09 )

function get_user_data($user_id = -1) {
if($user_id == -1) {
$user_id = $_SESSION['user_id'];
}
$result = $pdo-> exec("SELECT * FROM `panel_users` WHERE `user_id` = '{$user_id}' LIMIT 1"); return false;
}
}
W PDO metoda exec() to nie to samo co query(), czy połączenie prepare() i execute() - polecam doczytać, bo tak napisane nie zadziała - exec() nie służy do odczytywania rekordów z bazy.
Polecam również zapomnieć o mysql_num_rows i innych tego typu starociach, poczytać konkretnie o PDO i tego się trzymać.
Żeby być pomocnym, a nie po prostu opowiadać pierdoły, dwa fragmenty:
//tak wyglądał kiedyś kod zapytania MySQL:
$result = mysql_query("SELECT id, email FROM user WHERE username = '".$_GET['username']."'");
echo $user['email']." (".$user['id'].")";
//I to jest do kitu. Teraz robi się to tak (zapomnieć o wszystkim, co ma w nazwie "mysql_" !)
$pdo = new PDO('mysql:host=host;dbname=baza', 'user', 'pass');
$stmt = $pdo->prepare("SELECT id, email FROM user WHERE username = :username");
$stmt->execute(array(':username' => $_GET['username']));
$user = $stmt->fetch(PDO::FETCH_ASSOC);
echo $user['email']." (".$user['id'].")";
Cytat(Xelah)
Autor dostaje błąd tylko i wyłącznie dla tego, że jego funkcja nie ma dostępu do zmiennej $pdo, ponieważ ta ma inny scope. A żeby miała ten sam, to w jego przypadku należy ją przekazać jako parametr. Innego rozwiązania nie ma. I wtedy nie będzie miał błędu "Call to a member function query() on a non-object ".
Nie ma innego rozwiązania? Zawsze jest inne rozwiązanie!

Obiekt PDO można stworzyć wewnątrz funkcji, a jako parametry podać wartości z $_POST; będzie przejrzyściej - chyba że mamy w planach dużo innych zapytań, ale nie wygląda na to. Faktem jest, że trzeba coś tej funkcji dać (albo zrobić wszystko "na miejscu").
SELECT `user_id` FROM `panel_users` WHERE `user_name` = '{$_POST['name']}' AND `user_password` = '{$_POST['password']}' LIMIT 1
Nie piszemy zapytań w ten sposób! Poczytaj o SQL injection, a następnie o prepared statements (czyli metodach PDO: prepare() i execute() ).
I jeszcze:
$find = $pdo->query("SELECT `user_id` FROM `panel_users` WHERE `user_name` = '{$_POST['name']}' AND `user_password` = '{$_POST['password']}' LIMIT 1");
$find->execute();
- nie zadziała. Jeszcze raz polecam lekturę w temacie PDO: query(), prepare(), execute(), exec() - szczególnie o tym, co zwracają te metody.