2016-12-17 15 views
3

私はLaravel 5.3のPHPフレームワークを使用しており、DB :: statementメソッドを使用してデータベースを作成する方法に関する追加のガイダンスが必要です。このように、私はSQLインジェクションの可能性を認識してい:Laravel DB :: statement CREATE DATABASEはパラメータを追加できません(プリペインドステートメント?)

DB::statement('CREATE DATABASE new_database_name'); 

しかし、私はこのような何かをしたい:

DB::statement('CREATE DATABASE :db_name', ['db_name' => 'new_database_name']); 

私は、なぜ第二の例のdoesntの仕事はよく分かりません。私はlaravelのドキュメントを読んできましたが、このようなことはDB :: insert、DB :: select、で動作しますが、DB :: statementについてはどうですか?

+0

を助け

DB::statement("CREATE DATABASE {$newDatabase}"); 

希望のように使用することがありますか?あなたのMySQLユーザは、新しいデータベースを追加するための正しいアクセス権を持っていますか? Laravelのログ、PHPのログ、MySQLのログを確認し、ここに詳細を投稿してください。 – Yani

+0

それは本当に奇妙です。私はまた、バインディングで2番目の例を試してみると、構文エラーが発生します。バインディングしかし最初のものはうまく動作します。以下のgetConnection()の答えは、少なくとも5.2+では機能しません。少なくとも、それは古すぎます。 –

+0

申し訳ありませんが、私は答えを見つけました。データベース名の変数を指定することはできません。なぜなら、それはそこにあるものではないからです。詳細については、http://stackoverflow.com/questions/17590594/create-database-with-pdo-in-phpを参照してください。 –

答えて

0

あなたのコードがうまく動作しない理由は、データベースとの接続。 新しいテーブルを作成するには次のコードスニペットを使用します。 DB :: getConnection() - >ステートメント( 'CREATE DATABASE:schema'、array( 'schema' => $ schemaName));

詳細については、laravel.ioの次のリンクを使用してください。 http://laravel.io/forum/09-13-2014-create-new-database-and-tables-on-the-fly

+0

getConnection()は私が知っている限りlaravel 5.3で利用できません。フォーラムのリンクは2014年ですので、古いです – tomJO

+0

申し訳ありません..私は新しいバージョンでこれを試していません..しかし、接続する方法があるはずです。ではない? .envまたはconfig.phpファイルは実行時にデータベースを作成しているので、これを行うことはできません。もし私が間違っている場合はご容赦ください。 – HelpingHand

+0

接続は実際に動作します.DATABASE CREATEで準備された文を使用することはできません。ジョエル・ヒンズは私に答えの正しい方向を与えました。それは私の質問のコメントにあります。 古いバージョンでどのように動作するかわかりません。 – tomJO

2

実際には、CREATEまたはDROPではバインドパラメータを使用できません。その例えば:これはあなたがすべてのエラーを取得してください

関連する問題