Не работает sql запрос в функции php

332
12 марта 2017, 08:12

Доброг8о времени! У меня не работает sql запрос находящийся в теле функции php

вот собственно функция

function getscene($id) {
$fdb = new mysqli($gwedbhost,$gwedbuser,$gwedbpass,$gwedbname);
$fdb->set_charset("utf8");
$tmpsc = $fdb->query("SELECT * FROM screnstauns WHERE id='$id'");
$numsc = $tmpsc->num_rows;
$res = $numsc;
mysqli_close($fdb); 
return $res;
}

запускаю так

$sceneattr = getscene('40');
 echo $sceneattr;

ничего не выдает - пустой результат при том если запускаю без всякой функции так

$fdb = new mysqli($gwedbhost,$gwedbuser,$gwedbpass,$gwedbname);
$fdb->set_charset("utf8");
$tmpsc = $fdb->query("SELECT * FROM screnstauns WHERE id='40'");
$numsc = $tmpsc->num_rows;
echo $numsc;
mysqli_close($fdb); 

то все работает нормально выдает количество строк. Подскажите что тут конфликтует в функции, может я не правильно запрос создаю?

Answer 1

Внутри функции вы при подключении берете данные из переменных которых внутри функции нет:

function getscene($id) {
$fdb = new mysqli($gwedbhost,$gwedbuser,$gwedbpass,$gwedbname);

Вариантов несколько я вижу:

  1. Передавать все переменные $gwedbhost,$gwedbuser,$gwedbpass,$gwedbname в функцию что не очень красиво.

  2. Подключаться где то за пределами функции и передавать в функцию уже переменную $fdb

Answer 2

Попробуйте вот так

function getscene($id) {
  $fdb = new mysqli(&$gwedbhost,&$gwedbuser,&$gwedbpass,&$gwedbname);
  $fdb->set_charset("utf8");
  $tmpsc = $fdb->query("SELECT * FROM screnstauns WHERE id='$id'");
  $numsc = $tmpsc->num_rows;
  $res = $numsc;
  mysqli_close($fdb); 
  return $res;
}

Но я бы сделал немного по-другому Нарпимер

abstract class BaseSql{//должен быть переопределен
        public $mySqli;//объект по работе с базой данных
        public function Select($sql){
            $result=$this->mySqli->query($sql); //обратная сортировка - необходима для корректной работы парсера
            $arr=array();
            if(sizeof($result)>0) while($row=$result->fetch_assoc()) $arr[]=$row;
            //else echo'Ошибка: запрос '.$sql.' имеет пустое значение';
            return $arr;
        }
        protected function ConnectToBase($server,$user,$password,$db){
            @$mysqli = new mysqli($server, $user, $password, $db);
            @$mysqli->set_charset('utf8');
            // проверка соединения 
            if ($mysqli->connect_errno) {
                printf("Не удалось подключиться к базе: %s\n", $mysqli->connect_error);
                exit();
            }
            $this->mySqli=$mysqli;
            $this->setSettings();
        }
        public function LastId(){//возвращает последний id автоматически сгенерированный
            return $this->mySqli->insert_id;
        }
        protected function setSettings(){//позволяет отдавать больлшие обьемы текста функцией GROUP_CONCAT
            $this->mySqli->query('SET group_concat_max_len = 5000000;');
        }
        public function close(){
            mysqli_close($this->mySqli); 
        }
    }
    class db extends BaseSql{
        function __construct(){
            $server='';
            $user=''; 
            $password='';
            $db='';
            $this->ConnectToBase($server,$user,$password,$db);
        }
    }
    class fdb extends db{
        public function getscene($id){
            return $this->Select('SELECT * FROM screnstauns WHERE id=\''.$id.'\'');
        }
    }
    $db=new fdb();
    print_r($db->getscene(40));
    $db->close();

в классе db пропишите доступы

READ ALSO
Получить нужный текст

Получить нужный текст

ЗдравствуйтеКаким образом из строки http://site

231
Сортировка товаров по атрибутам

Сортировка товаров по атрибутам

Допустим при добавлении нового товара был добавлен некоторым товарам атрибут "gender"На странице категорий есть список select, в котором можно...

314
Выполнить замену всех строк

Выполнить замену всех строк

ЗдравствуйтеЕсть скрипт, который находит нужные строки, после он должен найти каждую совпавшую строку в тексте, и в случае нахождения - заменить...

222
CAPTCHA или ограничение количества попыток входа? [требует правки]

CAPTCHA или ограничение количества попыток входа? [требует правки]

Зачем нужно делать ограничение количества попыток входа в аккаунт, которое дополнительно нагружает систему (пусть и слегка), если можно просто...

235