2016-11-30 9 views
2

私の英語は申し訳ありませんが、Googleで正しい単語を見つけられず、なぜこのように機能するのかを知ることはできません。非常に簡単に解決する必要があります!変数を使わずに直接関​​数を返す

私はPHP 7を使用していますが、クエリで関数から提供された戻り値を使用する(バインドする)必要があります。私のバインド関数で直接関数を呼び出すと、何も返されません。私が$ var = function($ a)のように外側を呼び出して、$ varをbind関数に使うと、それは動作します。

なぜ私はこの機能を直接使用できないのですか?私が関数のパラメータ(function getID($ this-> getName(1))のような)でこれを行うと、それは機能します。なぜここにはないのですか?コード:

$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(); 

機能はかなり基本的なものです(/呼び出し機能/リターンを格納する変数を使用して)

 $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(); 

ワークスは動作しません

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

機能

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

のリターンの例 "バインド" 機能の私のdb PDOクラスから

 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あなたはこの問題にパッチを当てただけですが、間違ったデザインがまた逆戻りします。 –

関連する問題