1 Востаннє редагувалося Bartash (24.05.2013 12:49:41)

Тема: БД і CodeIgniter*

Вирішив я згадати РНР (глибоко не копав його вже років 5) та підняти простенький сайтик. За базу взяв CodeIgniter. Два дні розкурюю бамбук, стрибаючи від зневадження сесій у контролері до перевірки запиту з моделі.

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Login_model extends CI_Model
{
    public function __construct()
    {
        parent::__construct();
    }
    public function checkAuth( $login, $pass)
    {
        $dbHD = $this->load->database('main', TRUE);
        $req =    "SELECT UserId AS authid FROM dbo.w_Users WHERE Login='".
            $login
            ."' AND Pass='".
            md5( $pass )
            ."'"        ;

echo $req;
echo '<br/>';
        $query = $dbHD->query($req);
        $dbHD->close();

#        if($query->num_rows() != 1)
#        {
#            return FALSE;
#        }

        return ($query->row()->authid); # грубо, але дозволяє побачити суть помилки нижче
    }
}

І тут така біда (№рядку відповідає return $query->row()->authid. Я просто повидаляв трохи коментів):

бравзер написав:

A PHP Error was encountered

Severity: Notice

Message: Trying to get property of non-object

Filename: models/login_model.php

Line Number: 34

Себто з бази нічого не вертається.

І сіль у тому, що echo $req видає

SELECT UserId AS authid FROM dbo.w_Users WHERE Login='guest' AND Pass='*неважливо, бо співпадає, я перевіряв*'

І виконання запиту у самій базі вертає коректний і єдиний UserId:

authid 
------ 
1

(1 row(s) affected)

Робота з базою ведеться через SQLDRV (sql server'ні дрова від мілкософта для РНР>=5.3). Конект успішний.

Де я туплю?.. :(

I belong to the Dead Generation.

2

Re: БД і CodeIgniter*

З CodeIgniter не працював, але за логікою $dbHD->query має повертати не об'єкт, а ресурс (в тому чи іншому виді), а що з ресурсом стається після від'єднання від БД - і подумати страшно. Спробуйте робити  $dbHD->close() після закінчення роботи з базою.

Подякували: Bartash1

3 Востаннє редагувалося Адріян Ігорович (24.05.2013 13:13:05)

Re: БД і CodeIgniter*

А що каже

print_r($dbHD->query($req));

?

Подякували: Bartash1

4

Re: БД і CodeIgniter*

Hanter написав:

А що каже

print_r($dbHD->query($req));

?

вірніше var_dump

pew pew :D
Блоґ
Подякували: Bartash1

5

Re: БД і CodeIgniter*

Hanter написав:

А що каже

print_r($dbHD->query($req));

?

Та ніц.

Зате koala попав у десятку: я таки поплутав ресурс із результатом.
Перенесення дісконекту у кінець виправило ситуацію. :)

    public function checkAuth( $login, $pass)
    {
        $dbHD = $this->load->database('main', TRUE);
        $req =    "SELECT UserId AS authid FROM dbo.w_Users WHERE Login='".
            $login
            ."' AND Pass='".
            md5( $pass )
            ."'"        ;
echo $req;
echo '<br/>';
        $query = $dbHD->query($req);

$result = $query->row()->authid;
        $dbHD->close();
        return ($result);
    }
/*От що дає кодінг по четвергах...*/

Усім дякую за увагу і допомогу! :)

I belong to the Dead Generation.
Подякували: koala1

6 Востаннє редагувалося ozimok (22.10.2013 01:16:24)

Re: БД і CodeIgniter*

А чому Ви не використовуєте всі можливості active record codeigniter?

7

Re: БД і CodeIgniter*

ozimok написав:

А чому Ви не використовуєте всі можливості active record codeigniter?

Не було часу розбиратися з ним. Та й не факт, що він забезпечив би необхідну гнучкість за прозорості коду.

I belong to the Dead Generation.