私は数年前に書いた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
私の最善のアプローチは何ですか?動的テーブル名を静的な名前に置き換えますか? (この状況のテンポラリテーブルは日付を示す名前を持つ必要がないので、永久にそれを行うことを考えています)
ちなみに、あなたが本当に動けなくなるならば、あなたがデータベースエンジンに行き、すべてを記録するために、MySQLの「一般ログイン」を使用することができます。それは本当に便利です。 SQLを構築する多くのライブラリを見てきたので、彼らが何をしたかについても教えてくれるでしょう。これらはすべて、SQLのデバッグに非常に便利です。 –
チップ@RyanVincentをありがとう。私はそれが必要な場合にそれをオンにする場所を確認する必要があります。 – MJA