За последние 24 часа нас посетили 33005 программистов и 1756 роботов. Сейчас ищут 810 программистов ...

Не получается пользовательская функция

Тема в разделе "PHP для новичков", создана пользователем viktor72, 21 май 2017.

Метки:
  1. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    Не получается с функциями

    функция подключения к базе данных.
    connect.php
    PHP:
    1. function connect (){
    2.     $dsd = mysqli_connect('localhost', 'root', '', 'dsd');
    3.     return $dsd;
    4. }
    index.php
    PHP:
    1. include('connect.php');
    2. connect();
    Не подключаюсь. Где ошибка?

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

    PHP:
    1. function select ($db){
    2.     $sql = "SELECT name FROM table1";
    3.     $query = mysqli_query($db, $sql);
    4.     return $query;
    5.    
    6. }
    7.  
    8. select ($db);
    9.  
    10. while($row = mysqli_fetch_array($query)){
    11.     .....
    12. }
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    8 строка упущена переменная, какая ? угадай.
    ---------
    зачем писать каждый раз функцию, если запрос другой будет...?
    учитесь самообучением ?
     
    viktor72 нравится это.
  3. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    PHP:
    1. $db = mysqli_connect('localhost', 'root', '', 'dsd');
    2. $sql = "SELECT name FROM table1";
    3. $query = mysqli_query($db, $sql);
    4. while($row = mysqli_fetch_array($query)){
    5.     .....
    6. }
    вот так будет работать))
    Вы передаете в функцию select переменную $db которой у Вас судя по этому коду нет.
     
    viktor72 нравится это.
  4. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
     
  5. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    если будет повторятся в разных местах тогда уже добавьте и обработку запроса что бы массив получить на выходе из функции))
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    хотел ссылку кинуть но зачем...
    ООП тут нету где было бы недоступна переменная $db у него
     
  7. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    целиком это выглядит так :
    connect.php
    PHP:
    1. $db = mysqli_connect('localhost', 'root', '', 'dsd');
    index.php
    PHP:
    1. function select ($db){
    2.     $sql = "SELECT name FROM table1";
    3.     $query = mysqli_query($db, $sql);
    4.     return $query;
    5.  
    6. }
    7. select ($db);
    8. while($row = mysqli_fetch_array($query)){
    9.     .....
    10. }
    где не правильно? просивоить функию select () к каконибудь переменно? а потом засунуть её вместо $query ?
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    функция в 7 строке ничего не возвращает ?, откуда тогда берем переменную $query в 8 строке ?
     
    viktor72 нравится это.
  9. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    да, всё просто - $query = select($db);
    Я то думал, мне вернет $query из самой функции, но нет, оказывается так не возвращает.
    Спасибо.
    --- Добавлено ---
    теперь вопрос - почему функция подключение не работает?
    connect.php
    PHP:
    1. $local = 'localhost';
    2. $root = 'root';
    3. $pass = '';
    4. $crm = 'crm';
    5.  
    6. function connect(){
    7.     $db = mysqli_connect($local, $root, $pass, $crm);
    8.     return $db;
    9.     }
    index.php
    PHP:
    1. include('connect.php');
    2. connect();
    такой номер типа - $db = connect(); - не проходит.
    почему не работает? куда смотреть?
     
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    не спеши
    PHP:
    1. # одна вселенная
    2. $a = 1;
    3.  
    4. function test( $value = '<br>lol' ) # задаем имя переменной для входящих данных + ставим дефолт данные ( необязательно )
    5. {
    6.     # другая вселенная $a в этой функции не существует.
    7.    echo $value; # echo и return - две разные вещи
    8. }
    9.  
    10. # портал из одной вселенной в другую :)
    11. test( $a ); # выйдет 1, так как перекрыли дефолт значение
    12. test(); # секретарша даже поймет
    есть очень много способов от констант до ООП + обвертка чтобы не е** дальше мозг с доступами во вселенной.
    Один прикол:
    PHP:
    1. $a = 1;
    2.  
    3. $lal = function () use ( $a )
    4. {
    5.     return $a;
    6. };
    7.  
    8. echo $lal();
    Обвертка на PDO:
    PHP:
    1. Class SQL
    2. {
    3.     const HOST = '';
    4.     const DB_NAME = '';
    5.     const USER = '';
    6.     const PASSWORD = '';
    7.     const CHARSET = 'utf8';
    8.     protected static $INSTANCE = NULL;
    9.  
    10.     public static function instance()
    11.     {
    12.         if ( self::$INSTANCE === NULL )
    13.         {
    14.             self::$INSTANCE = new PDO( sprintf ( 'mysql:host=%s;dbname=%s;charset=%s', self::HOST, self::DB_NAME, self::CHARSET ), self::USER, self::PASSWORD,
    15.             [
    16.                 PDO::ATTR_ERRMODE                => PDO::ERRMODE_EXCEPTION,
    17.                 PDO::ATTR_DEFAULT_FETCH_MODE    => PDO::FETCH_ASSOC,
    18.                 PDO::ATTR_EMULATE_PREPARES        => FALSE,
    19.             ] );
    20.         }
    21.      
    22.         return self::$INSTANCE;
    23.     }
    24.     public static function __callStatic( $method, $args )
    25.     {
    26.         return call_user_func_array ( [ self::instance(), $method ], $args );
    27.     }
    28.     public static function P( $sql, $args = [] )
    29.     {
    30.         $stmt = self::instance() -> prepare( $sql );
    31.         $stmt -> execute( $args );
    32.      
    33.         return $stmt;
    34.     }
    35. }
     
    viktor72 нравится это.
  11. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    Офигеть! какая красота!
    Жаль я совершенно не знаком с ооп и с pdo
    Я пошел логическим путем и достучался сам , сделал примитивную функцию подключения к базе. на фоне выше написанного мне даже стыдно демонстрировать.
    Спасибо.
     
  12. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    У PDO что пишут:
    Код (Text):
    1. ВАЖНО: Подготовленные выражения - основная причина использовать PDO, поскольку это единственный безопасный способ выполнения SQL запросов, в которых участвуют переменные.
    http://phpfaq.ru/pdo
    --- Добавлено ---
    пару дней тестов и ты повар
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Лол. Автор, читайвникай, анализируй.
     
  14. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    пойду скинусь с 5 этажа
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Было б из-за чего.
     
  16. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    мне в PDO нравится как заносятся данные в подготовке через execute
     
  17. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Ды все так же, как в mysqli по сути.
     
  18. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.817
    Симпатии:
    1.333
    Адрес:
    Лень
    нет, там bind'ами запары, логика одна, но кода много
     
  19. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Зато под капотом костылей нет. В конечном счете это важнее, имхо.