2016-11-30 6 views
2

Извините за свой английский, я не могу найти правильные слова в Google, чтобы узнать, почему он действует именно так. Должно быть очень легко решить!Использовать возврат функции напрямую без переменной

Я использую PHP 7, и я хочу использовать возврат, предоставляемый функцией для запроса (привязать его). Если я вызываю непосредственно функцию в моей функции привязки, она ничего не возвращает. Если я вызываю его снаружи, например $ var = function ($ a) и использует $ var в функции bind, он работает.

Не понимаю, почему я не могу использовать функцию напрямую? Если я делаю это в параметрах функции (например, функция getID ($ this-> getName (1))), она работает. почему его здесь нет? Код:

Не работает

 $this->bdd->query("UPDATE stats_of_the_days 
          SET winner_firstsolves = :winner_fs 
          WHERE id = :stat_id"); 

     $this->bdd->bind("winner_fs", $this->getTodayWinnerFs($winnerID), PDO::PARAM_INT); 
     $this->bdd->bind("stat_id", $statID, PDO::PARAM_INT); 

     $this->bdd->execute(); 

Works (используя переменную для вызова/сохранения функции/возврат)

$var = $this->getTodayWinnerFs($winnerID); 

    $this->bdd->query("UPDATE stats_of_the_days 
         SET winner_firstsolves = :winner_fs 
         WHERE id = :stat_id"); 

    $this->bdd->bind("winner_fs", $var, PDO::PARAM_INT); 
    $this->bdd->bind("stat_id", $statID, PDO::PARAM_INT); 


    $this->bdd->execute(); 

функция довольно простой

public function getTodayWinnerFs($userID) 
    { 
     // query stuff 
     return $this->bdd->resultObj()->Wins; 
    } 

Пример возврата функции

var_dump($this->getTodayWinnerFs(494)); 
// string(2) "13" 

Функция "связать" с моей БД класса п.д.о.

 public function bind($param, $value, $type = null) 
     { 
      if (is_null($type)) { 
       switch (true) { 
        case is_int($value): 
         $type = PDO::PARAM_INT; 
         break; 
        case is_bool($value): 
         $type = PDO::PARAM_BOOL; 
         break; 
        case is_null($value): 
         $type = PDO::PARAM_NULL; 
         break; 
        default: 
         $type = PDO::PARAM_STR; 
       } 
      } 
      $this->stmt->bindValue($param, $value, $type); 
     } 

Спасибо!

+0

[Ваши первые детские болезни оболочки базы данных] (https://phpdelusions.net/pdo/common_mistakes) –

ответ

5

- это потому, что метод getTodayWinnerFs() и главный делится $this->bdd, и в неправильном порядке он находится в другом состоянии, я думаю, вы должны придерживаться рабочего примера и не выполнять вызовы функций внутри вызовов функций, это будет затруднить чтение.

+0

Спасибо, это имеет смысл! Это просто, что мне нравится получать меньше строк в моем коде, что приводит к такого рода поведениям и ошибкам, к сожалению ... (Я должен связать 7 переменных для этого запроса). – kinoute

+0

Я создал функцию bindArray, связываю все параметры в массиве перед вызовом $ this-> bdd-> query(), работает очень хорошо! – kinoute

+0

@kinoute вы только исправили эту проблему, но неправильный дизайн снова обернется. –