2016-12-05 14 views
1

エラーの詳細な説明はありません。上記のエラーは私が得ている唯一のものです。私はまた、エラーの行を取得することができ、それは私がfetchAll結果をしようとするものです。巨大なクエリを返すSQLSTATE [HY000]:一般的なエラー

$id = (int) base64_decode($id); 
try { 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $conn->beginTransaction(); 
    $sql = "SET @i:=0; SELECT result.* FROM (SELECT @x:[email protected]+1 AS position, temp.* FROM (SELECT u.id, u.fbname, MAX(c.likeit + c.loveit + c.cute + c.aw) AS total, c.likeit, c.loveit, c.cute, c.aw FROM currentphoto AS c LEFT JOIN users AS u ON u.id = c.id GROUP BY u.id ORDER BY total DESC) temp) result WHERE id = :id"; 
    $stmt = $conn->prepare($sql); 
    $stmt->bindParam(':id', $id, PDO::PARAM_INT); 
    $stmt->execute(); 
    $rows = $stmt->fetchAll(PDO::FETCH_OBJ); 
    $conn->commit(); 
} catch (Exception $e) { 
    $conn->rollBack(); 
    echo $e->getMessage(); 
} 
if ($rows != null) { 
    return json_encode(base64_encode($rows)); 
} else return null; 

私は、PDOでmysql変数を使用すると、別のクエリで宣言を使用する必要があるかもしれません。そうですか?もしそうなら、どうしたらいいですか?私は最初のステートメントを変数で実行し、2番目のステートメントはその後で実行しますか?

それが正しくない場合、問題は何ですか?ありがとうございました

+0

は、より具体的なUBことができますについて説明しますlまたはスクリーンショット。あなたのお問い合わせにお答えします。 –

答えて

1

あなたが直面しているエラーは、単一のクエリで複数のステートメントを使用している可能性があります。

あなたはここで2つのオプションがあります。

  • は1文で/クエリにそれらを分割し、その後それらを実行(あなたのケースでは、2つのクエリ)
  • 使用$conn->setAttribute(\PDO::ATTR_EMULATE_PREPARES, 1);単一のクエリ
  • で複数のステートメントを許可するに

この答えは、あなたがWIL場合はエラーを貼り付け、ATTR_EMULATE_PREPARESPDO MySQL: Use PDO::ATTR_EMULATE_PREPARES or not?

+0

あなたの提案に感謝します。編集した投稿をチェックしてください。 –

+0

あなたは '@ i'を設定していますが、' @ x'を使用しています。それを修正してもう一度確認できますか? 'SET @i:= 0; SELECT result。* FROM(SELECT @x ... ' –

+0

ありがとう、ありがとうございました。あなたが言ったように、私は別のクエリから変数名を使用していました。 –

関連する問題