Атрыманне інфармацыі з базы дадзеных з PHP класаў

Я спрабую атрымаць інфармацыю з маёй табліцы з дапамогай PHP класаў, але гэта не працуе

Звярніце ўвагу, што я ведаю, я выкарыстоўваю MySQL _ * функцыі.

<�Моцны> Выклік на PHP старонцы

print $User->getCredits(); 

Class

require 'dbconfig.php';

class User {

    public function getCredits($uid)
    {
        echo 'asda';
        $rs = mysql_query("SELECT credits FROM `users` WHERE oauth_uid = '$uid'");
        $row=mysql_fetch_object($rs);
        return $row->credits;
    }

}
0
@Jimbo, "да каментарыяў Im дасведчаныя ім з дапамогай mysql_ *"
дададзена аўтар Shoe, крыніца
@Jimbo, "да каментарыяў Im дасведчаныя ім з дапамогай mysql_ *"
дададзена аўтар Shoe, крыніца
@Jimbo, "да каментарыяў Im дасведчаныя ім з дапамогай mysql_ *"
дададзена аўтар Shoe, крыніца
Вы забыліся зрабіць пытанне.
дададзена аўтар Álvaro González, крыніца
Вы забыліся зрабіць пытанне.
дададзена аўтар Álvaro González, крыніца
Вы забыліся зрабіць пытанне.
дададзена аўтар Álvaro González, крыніца
Такім чынам, у чым праблема? Акрамя таго, не варта выкарыстоўваць mysql_ * функцыі, выкарыстоўваць PDO.
дададзена аўтар Jimbo, крыніца
Такім чынам, у чым праблема? Акрамя таго, не варта выкарыстоўваць mysql_ * функцыі, выкарыстоўваць PDO.
дададзена аўтар Jimbo, крыніца
@Jimbo няма ніякіх аб'ектыўных прычын, каб проста выкарыстоўваць PDO ўсюды, так як ён мае іншы інтэрфейс. mysqli_ * будзе правільная заменай, так як яна мае такі ж самы інтэрфейс, навей, і можа даць больш высокую прадукцыйнасць, у залежнасці ад канфігурацыі (ўключана mysqlnd або няма і г.д.)
дададзена аўтар griffin, крыніца
@Jimbo няма ніякіх аб'ектыўных прычын, каб проста выкарыстоўваць PDO ўсюды, так як ён мае іншы інтэрфейс. mysqli_ * будзе правільная заменай, так як яна мае такі ж самы інтэрфейс, навей, і можа даць больш высокую прадукцыйнасць, у залежнасці ад канфігурацыі (ўключана mysqlnd або няма і г.д.)
дададзена аўтар griffin, крыніца
@Jimbo няма ніякіх аб'ектыўных прычын, каб проста выкарыстоўваць PDO ўсюды, так як ён мае іншы інтэрфейс. mysqli_ * будзе правільная заменай, так як яна мае такі ж самы інтэрфейс, навей, і можа даць больш высокую прадукцыйнасць, у залежнасці ад канфігурацыі (ўключана mysqlnd або няма і г.д.)
дададзена аўтар griffin, крыніца

8 адказы

Яна глядзіць на мяне, як вы выклікаеце функцыю-член без асобніка класа, а таксама не прайшлі ідэнтыфікатар карыстальніка:

print $User->getCredits();

Unless you have a variable $User with the same name as the class (a little confusing?). Is that the problem you're seeing? Also you're missing the function parameter uid

If you defined it as a static function you could then do User::getCredits($uid). Either that or create an instance of the class... $thisUser = new User(...); $thisUser->getCredits(...).

1
дададзена
Прывітанне, чаму ўніз галасаваць?
дададзена аўтар Jimbo, крыніца
Я хацеў бы паспрабаваць print_r ($ радок); з функцыі першага.
дададзена аўтар timstermatic, крыніца

Яна глядзіць на мяне, як вы выклікаеце функцыю-член без асобніка класа, а таксама не прайшлі ідэнтыфікатар карыстальніка:

print $User->getCredits();

Unless you have a variable $User with the same name as the class (a little confusing?). Is that the problem you're seeing? Also you're missing the function parameter uid

If you defined it as a static function you could then do User::getCredits($uid). Either that or create an instance of the class... $thisUser = new User(...); $thisUser->getCredits(...).

1
дададзена
Прывітанне, чаму ўніз галасаваць?
дададзена аўтар Jimbo, крыніца
Я хацеў бы паспрабаваць print_r ($ радок); з функцыі першага.
дададзена аўтар timstermatic, крыніца

Яна глядзіць на мяне, як вы выклікаеце функцыю-член без асобніка класа, а таксама не прайшлі ідэнтыфікатар карыстальніка:

print $User->getCredits();

Unless you have a variable $User with the same name as the class (a little confusing?). Is that the problem you're seeing? Also you're missing the function parameter uid

If you defined it as a static function you could then do User::getCredits($uid). Either that or create an instance of the class... $thisUser = new User(...); $thisUser->getCredits(...).

1
дададзена
Прывітанне, чаму ўніз галасаваць?
дададзена аўтар Jimbo, крыніца
Я хацеў бы паспрабаваць print_r ($ радок); з функцыі першага.
дададзена аўтар timstermatic, крыніца
// Insert code her to connect to db (mysql_connect/mysql_pconnect if you use the MySQL -family ; but you should really switch to be using mysqli_*, which is mostly the same, but it's newer and might use mysqlnd PHP native driver for better performance)
$user = new User();
echo $user->getCredits();

Акрамя таго, вы павінны дадаць праверку памылак (mysql_error ()) і пазбегнуць $ UID (калі гэта можа быць толькі INT, вы можаце выкарыстоўваць intval, але genereic рашэннем было б выкарыстоўваць mysql_real_escape_string)

калі вы карыстаецеся двукоссе, вы павінны выкарыстоўваць іх паслядоўна, напрыклад:

"SELECT `credits` FROM `users` WHERE `oauth_uid` = '" . mysql_real_escape_string($uid) . '"
1
дададзена
// Insert code her to connect to db (mysql_connect/mysql_pconnect if you use the MySQL -family ; but you should really switch to be using mysqli_*, which is mostly the same, but it's newer and might use mysqlnd PHP native driver for better performance)
$user = new User();
echo $user->getCredits();

Акрамя таго, вы павінны дадаць праверку памылак (mysql_error ()) і пазбегнуць $ UID (калі гэта можа быць толькі INT, вы можаце выкарыстоўваць intval, але genereic рашэннем было б выкарыстоўваць mysql_real_escape_string)

калі вы карыстаецеся двукоссе, вы павінны выкарыстоўваць іх паслядоўна, напрыклад:

"SELECT `credits` FROM `users` WHERE `oauth_uid` = '" . mysql_real_escape_string($uid) . '"
1
дададзена

Праблема складаецца ў два разы:

  1. ваш клас не асобнік, а
  2. вы не перадаеце свой $ UID у getCredits() метад.

Пакідаючы вызначэнне класа як ёсць, вы можаце зрабіць гэта:

<�Моцны> Выклік на PHP старонцы

$uid = 1;
$user = new User();
print $user->getCredits($uid);

Тым не менш, я прапаную вам перабудаваць свой клас, каб стварыць яго асобнік з ідэнтыфікатарам карыстальніка ў канструктару, а затым ваша функцыя павінна выкарыстоўваць лакальныя параметры ідэнтыфікатара карыстальніка ў запыце, а не патрабуюць UID на ўзроўні метады. Паспрабуйце гэта:

<�Моцны> Выклік на PHP старонцы

$uid = 1;
$user = new User($uid);
print $user->getCredits(); 

<�Моцны> Клас </моцны>

require 'dbconfig.php';

class User {

    private $_uid;

    public function __construct($uid) {
        $this->_uid = $uid;
    }

    public function getCredits()
    {
        echo 'asda';
        $sql = "SELECT `credits` 
                FROM `users` 
                WHERE `oauth_uid` = '{$this->_uid}'";
        $rs = mysql_query($sql);
        $row = mysql_fetch_object($rs);
        return $row->credits;
    }

}
0
дададзена
Хоць правільна, клас PHP не патрэбны відавочны канструктар. З іншага боку, гэта, верагодна, больш оо, каб зрабіць гэта такім чынам. Справа густу, я думаю.
дададзена аўтар griffin, крыніца

Праблема складаецца ў два разы:

  1. ваш клас не асобнік, а
  2. вы не перадаеце свой $ UID у getCredits() метад.

Пакідаючы вызначэнне класа як ёсць, вы можаце зрабіць гэта:

<�Моцны> Выклік на PHP старонцы

$uid = 1;
$user = new User();
print $user->getCredits($uid);

Тым не менш, я прапаную вам перабудаваць свой клас, каб стварыць яго асобнік з ідэнтыфікатарам карыстальніка ў канструктару, а затым ваша функцыя павінна выкарыстоўваць лакальныя параметры ідэнтыфікатара карыстальніка ў запыце, а не патрабуюць UID на ўзроўні метады. Паспрабуйце гэта:

<�Моцны> Выклік на PHP старонцы

$uid = 1;
$user = new User($uid);
print $user->getCredits(); 

<�Моцны> Клас </моцны>

require 'dbconfig.php';

class User {

    private $_uid;

    public function __construct($uid) {
        $this->_uid = $uid;
    }

    public function getCredits()
    {
        echo 'asda';
        $sql = "SELECT `credits` 
                FROM `users` 
                WHERE `oauth_uid` = '{$this->_uid}'";
        $rs = mysql_query($sql);
        $row = mysql_fetch_object($rs);
        return $row->credits;
    }

}
0
дададзена
Хоць правільна, клас PHP не патрэбны відавочны канструктар. З іншага боку, гэта, верагодна, больш оо, каб зрабіць гэта такім чынам. Справа густу, я думаю.
дададзена аўтар griffin, крыніца
have you created object of class `"User"` like this:

$User = new User();
0
дададзена