0

MySQLテーブルの内容を表示するために以下の関数を書き込もうとしています。

$q=$_GET["q"];
function risk_allocation($db)  
  {    
    $result = $db->query("select r.risks as risks,r.risktype as risktype,j.job as job from risks r LEFT OUTER JOIN `jobsrisks` j on r.risks = j.risk and j.job=:q"); 
    $result ->bindParam(':q', $q, PDO::PARAM_INT);
    return $result; 
  }
        $allocationlist = risk_allocation($db); 

次に、関数を次のように呼び出しています。

while($row = $allocationlist->fetch(PDO::FETCH_ASSOC)) 
{
echo $line['risks'];
echo $line['risktype'];
}

エラーメッセージが表示されます:

Fatal error: Call to a member function bindParam() on a non-object in /home/she/public_html/versionfour/getrisksperjob.php on line 11

11行目はどこですか

$result ->bindParam(':q', $q, PDO::PARAM_INT);

これは、pdo を紹介されたばかりの単純な質問だと思いますが、いつものように助けていただければ幸いです。

アップデート

提案された回答によると、私のコードは以下のようになり、クエリを実行して変数qを含めます。それでも同じエラーが発生します。これまで助けてくれてありがとう、何かアイデアはありますか?

致命的なエラー: 11 行目の /home/she/public_html/versionfour/getrisksperjob.php の非オブジェクトに対するメンバー関数 bindParam() の呼び出し

function risk_allocation($db,$q)  
  {    
    $result = $db->query("select r.risks as risks,r.risktype as risktype,j.job as job from risks r LEFT OUTER JOIN `jobsrisks` j on r.risks = j.risk and j.job=:q"); 
    $result ->bindParam(':q', $q, PDO::PARAM_INT);
    $result->execute();
    return $result; 
  }
  $allocationlist = risk_allocation($db,$q); 
4

2 に答える 2

3

クエリを実行するのを忘れました。さらに、クエリを呼び出す代わりに準備する必要があります。

$result = $db->prepare("select r.risks as risks,r.risktype as risktype,j.job as job from risks r LEFT OUTER JOIN `jobsrisks` j on r.risks = j.risk and j.job=:q"); 
$result->bindParam(':q', $q, PDO::PARAM_INT);
$result->execute();
于 2012-10-29T08:42:44.317 に答える
2

1.You forgot to execute query

$result->execute();

2.$q is outside function so you will never get value of that inside function. pass $q as second parameter of function

$q=$_GET["q"];
function risk_allocation($db,$q)  
  {    
    $result = $db->prepare("select r.risks as risks,r.risktype as risktype,j.job as job from risks r LEFT OUTER JOIN `jobsrisks` j on r.risks = j.risk and j.job=:q"); 
    $result ->bindParam(':q', $q, PDO::PARAM_INT);
    $result->execute();
    return $result; 
  }
  $allocationlist = risk_allocation($db,$q); 
于 2012-10-29T08:47:29.147 に答える