2016-04-14 15 views
0

私はmysqlからPDOに移行しています。 GETエラーを呼び出すときに、私は、関数を作成しますが、しています:PDO prepare文でエラーが発生する

Catchable fatal error: Object of class stdClass could not be converted to string in file * on line ** 

私は「e.match_id = 『$ row1-> match_id』」ものを持っている場合、移行のこのタイプを処理する方法がわかりません。古いMySQLでコード:PDOと

$query11 = "SELECT COUNT(e.event_id) as numgoals 
FROM event e 
WHERE (e.match_id = '$row1->match_id' AND e.team_id = '$row1->team_a_id' AND e.eventtype IN ('soc_G','soc_PG')) OR 
     (e.match_id = '$row1->match_id' AND e.team_id = '$row1->team_b_id' AND e.eventtype = 'soc_OG')"; 
$result11 = mysql_query($querye11); 
$row11 = mysql_fetch_object($result11); 

が機能:

public function getResult11($row) 
    { 
     $query = "SELECT COUNT(e.event_id) as numgoals 
        FROM event e 
        WHERE (e.match_id = '?->match_id' AND e.team_id = '?->team_a_id' AND e.eventtype IN ('soc_G','soc_PG')) OR 
          (e.match_id = '?->match_id' AND e.team_id = '?->team_b_id' AND e.eventtype = 'soc_OG')"; 
     $statement = $this->db->prepare($query); 
     $statement->execute(array($row)); 
     return $statement->fetchObject(); 
    } 

関数パラメータを "$のROW1" を変更する "e.match_id = '$ row1-> match_id'" を変換する方法は?私はこの "e.match_id = '? - > match_id'"を使用しましたが、それが正しいかどうかはわかりません。

+0

で使用される場合には、 '$行にあるものたちを表示します' – RiggsFolly

+0

これは '? - > match_id ''が正しい構文ではありません。名前付きパラメータ、つまり ':match_id'または位置パラメータ、'? ​​'を使用しますか? – RiggsFolly

+0

'$ row'は別のクエリです。わからない、私はそれが私の場合に最適なものを使用します。 – Sagi

答えて

-1

あなたは間違った文字列内の変数を使用している:

SELECT $match->match_id$mathを変換し、->match_id手つかずのままになります。

変数の周りに使用{}:プリペアドステートメントの

SELECT {$match->match_id} 

適切なユーザー

$query = "[...] WHERE (e.match_id = :mId AND e.team_id = :t1Id AND e.eventtype IN ('soc_G','soc_PG')) OR 
         (e.match_id = :mId AND e.team_id = :t2Id AND e.eventtype = 'soc_OG')"; 
$statement = $this->db->prepare($query); 
$statement->execute([ 
    ':mId' => $row1->team_a_id, 
    ':t1Id' => $row1->team_a_id, 
    ':t2Id' => $row1->team_b_id, 
]); 

ループ

$statement = $this->db->prepare("SELECT * FROM table WHERE id = :id"); 

foreach ($ids as $id) { 
    $statement->execute([ 
     ':id' => $id, 
    ]); 
} 
+0

私はあなたが '?'を紛失していると思います。少し混乱していると思います。 – RiggsFolly

+0

'$ row1-> match_id'、' $ row1-> team_a_id'、 '$ row1-> team_b_id'同じ行1を取得します。私は3つのパラメータを使うべきですか? – Sagi

+0

@Sagi 'execute'では、構造体' 'param '=>" Actual value "で配列を渡すだけです。 – Justinas

関連する問題