2017-02-07 4 views
0

私は数年前に書いたPHP/MySQLのレポートコードを更新しています。 1つのPHPページには50以上のSQL文があります。その中にはテンポラリテーブルを作成するものもあり、その中には変数を使用するPHPで簡単な少なくとも1つのダイナミックテーブル(Report_201701など)があります。準備されたステートメントを表示する方法または動的テーブル名を放棄する必要がありますか?

しかし、これらの文をすべてMySQL Workbenchに適用してトラブルシューティングと拡張を行うと、ダイナミックテーブル名に変数を使用しているため、プリペアドステートメントの出力を見ることができないため、

私は動的SQLに精通していません。クエリ結果を表示/出力できる方法はありますか? According to this post私はできないようです。

文の数は、私はこのような変数に割り当てることで、閲覧することができた単一の値、返す:

set @sqlQuery = 
    Concat(
     'SELECT 1 as "A" 
     into @sqlOut;' 
    ); 
    #$opentickets = mysql_result($sqlQuery, 0); 
PREPARE stmt1 from @sqlQuery; 
EXECUTE stmt1; 
deallocate prepare stmt1; 
select @sqlOut; 

# @sqlOut 
----------- 
1 

をしかし、私は複数の列を返す結果または複数行でそれをしようとした場合

set @sqlQuery = 
    Concat(
     'SELECT 1 as "A", 2 as "B", 3 as "C" 
     into @sqlOut;' 
    ); 
    #$opentickets = mysql_result($sqlQuery, 0); 
PREPARE stmt1 from @sqlQuery; 
EXECUTE stmt1; 
deallocate prepare stmt1; 
select @sqlOut; 

Error Code: 1222. The used SELECT statements have a different number of columns 


set @sqlQuery = 
    Concat(
     'SELECT 1 as "A" 
     UNION SELECT 2 as "A" 
     UNION SELECT 3 as "A" 
     into @sqlOut;' 
    ); 
    #$opentickets = mysql_result($sqlQuery, 0); 
PREPARE stmt1 from @sqlQuery; 
EXECUTE stmt1; 
deallocate prepare stmt1; 
select @sqlOut; 

Error Code: 1172. Result consisted of more than one row 

私の最善のアプローチは何ですか?動的テーブル名を静的な名前に置き換えますか? (この状況のテンポラリテーブルは日付を示す名前を持つ必要がないので、永久にそれを行うことを考えています)

+1

ちなみに、あなたが本当に動けなくなるならば、あなたがデータベースエンジンに行き、すべてを記録するために、MySQLの「一般ログイン」を使用することができます。それは本当に便利です。 SQLを構築する多くのライブラリを見てきたので、彼らが何をしたかについても教えてくれるでしょう。これらはすべて、SQLのデバッグに非常に便利です。 –

+0

チップ@RyanVincentをありがとう。私はそれが必要な場合にそれをオンにする場所を確認する必要があります。 – MJA

答えて

0

まあ、私は、MySQL Workbench DOES出力がSELECT文を用意しているという発見に遭遇しました。変数に割り当てる必要はありません。これが誰かを助けるかどうか、または明白なことを述べるために削除する必要があるかどうかは不明です。

set @sqlQuery = 
    Concat(
     'SELECT 1 as "A", 2 as "B", 3 as "C" 
     UNION SELECT 10 as "A", 20 as "B", 30 as "C" 
     UNION SELECT 100 as "A", 200 as "B", 300 as "C";' 
    ); 
PREPARE stmt1 from @sqlQuery; 
EXECUTE stmt1; 
deallocate prepare stmt1; 

戻り値:

A  B  C 
'1'  '2'  '3' 
'10' '20' '30' 
'100' '200' '300' 
関連する問題