MENU
  • FUNBREWについて
    • 営業日・営業時間
  • 事業内容
    • ITサポート
    • ウェブサイト制作
    • システム開発
    • プログラミングレッスン
    • フリーランス転向支援
  • 対応エリア
  • FAQ
  • パートナー募集
    • 制作会社さまのITパートナーとして
  • お問い合わせ
  • イベント
  • 記事一覧
FUNBREW
あなたの会社のIT顧問
  • FUNBREWについて
    • 営業日・営業時間
  • 事業内容
    • ITサポート
    • ウェブサイト制作
    • システム開発
    • プログラミングレッスン
    • フリーランス転向支援
  • 対応エリア
  • FAQ
  • パートナー募集
    • 制作会社さまのITパートナーとして
  • お問い合わせ
  • イベント
  • 記事一覧
FUNBREW
  • FUNBREWについて
    • 営業日・営業時間
  • 事業内容
    • ITサポート
    • ウェブサイト制作
    • システム開発
    • プログラミングレッスン
    • フリーランス転向支援
  • 対応エリア
  • FAQ
  • パートナー募集
    • 制作会社さまのITパートナーとして
  • お問い合わせ
  • イベント
  • 記事一覧

MySQLのprepareでテーブル名をプレースホルダーにすることはできない

2023 2/04
技術ブログ
2023年2月4日 2023年2月4日

タイトルの通りなのですが、データのメンテナンスでテーブルを動的に作りたいことがあり、prepare を試したところ、うまく行きませんでした。

メモも兼ねて対応策を記載しておきます。

次の例はテーブル名をプレースホルダーにして、実行させているのですが失敗します。

set @stmt = 'CREATE TABLE ? (id INT)';
set @name = 'prepare_test';
PREPARE stmt FROM @stmt;
EXECUTE stmt USING @name; -- Query 4 ERROR: Unknown prepared statement handler (stmt) given to EXECUTE

EXECUTEを抜いて実行すると違うエラーになります。

どうやら文法が間違っているとのこと。

set @stmt = 'CREATE TABLE ? (id INT)';
set @name = 'prepare_test';
PREPARE stmt FROM @stmt; -- Query 3 ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? (id INT)' at line 1

試しにprepare_testというテーブルを先に作成して、以下のSQLを実行すると成功します。

set @stmt = 'select ? from prepare_test';
set @column = 'id';
PREPARE stmt FROM @stmt;
EXECUTE stmt USING @column;

しかし、テーブル名をプレースホルダーにすると先ほどと同じように文法エラーになります。

set @stmt = 'select id from ?';
set @column = 'prepare_test';
PREPARE stmt FROM @stmt; -- Query 3 ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1

では対策がないのかというと、そうでもなく。

プレースホルダーをやめて、クエリをあらかじめ完成させておくと問題なく実行できます。

set @name = 'prepare_test';
set @stmt = CONCAT('CREATE TABLE ', @name, ' (id INT)');
PREPARE stmt FROM @stmt;
EXECUTE stmt;
未経験でエンジニアを目指すなら

ファンブリューではエンジニアになりたい人を支援しています。

現在こんなお悩みがあれば、ぜひ一度ご相談ください。

  • プログラミングを学習したいが、何から始めたらいいかわからない。
  • IT業界に就職するために必要な知識が何かわからない。
  • 実務経験がなくて現場に入れない
お問合わせはこちら
技術ブログ
  • Laravel Duskでエラーになったテストだけ実行する
  • Wordpressのメンテナンスモードを解除する方法

金井 泰樹のアバター 金井 泰樹 FUNBREW代表

FUNBREWの代表。
新卒からIT系の企業に勤め、SES、スマホアプリ開発、自社開発の会社で経験を積んで独立。
新卒時代にエンジニアとしてのキャリアを積むのに失敗し、その後に苦労した経験から、現在教育事業の立ち上げを準備中。
強みはウェブシステム開発全般と迅速なレスポンスです。

この著者の記事一覧へ

関連記事

  • Macでrenameコマンドを使って拡張子を変更する
    2023年3月19日 2023年3月19日
  • daisyUIでダークモードをオフにする
    2023年3月14日 2023年3月14日
  • flutterで外部からアクセスさせる
    2023年3月7日 2023年3月7日
  • Laravelのconfigを使って定数を設定をする
    2023年3月6日 2023年3月6日
  • Laravel Forgeの開発でdevドメインをSSL化する方法
    2023年3月3日 2023年3月3日
  • Laravel Forgeを使ってLaravelと静的サイトを同居させる
    2023年3月1日 2023年3月1日
  • Viteの設定ファイル内でバージョンを指定する
    2023年2月20日 2023年2月20日
  • PCにインストール済みのFlutterのバージョンを更新する方法
    2023年2月12日 2023年2月12日
  1. ホーム
  2. 技術ブログ
  3. MySQLのprepareでテーブル名をプレースホルダーにすることはできない
  • FUNBREWについて
    • 営業日・営業時間
  • 事業内容
    • システム開発
    • ウェブサイト制作
    • プログラミングレッスン
    • フリーランス転向支援
    • ITサポート
  • 対応エリア
  • FAQ
  • パートナー募集
    • 制作会社さまのITパートナーとして
  • イベント
  • お問い合わせ
  • 記事一覧
  • お知らせ

© FUNBREW

  • メニュー
  • FUNBREWについて
    • 営業日・営業時間
  • 事業内容
    • システム開発
    • ウェブサイト制作
    • プログラミングレッスン
    • フリーランス転向支援
    • ITサポート
  • 対応エリア
  • FAQ
  • パートナー募集
    • 制作会社さまのITパートナーとして
  • イベント
  • お問い合わせ
  • 記事一覧
  • お知らせ
目次