我试图向Laravel的查询构建器运行原始mysql语句,以创建一个新的MySQL用户。 当然,我使用参数绑定来防止注射。
我当前的查询在Laravel 4 of 5中不起作用:
DB::statement( 'CREATE USER \':username\'@\'localhost\' IDENTIFIED BY \':password\';', array('username' => 'johndoe', 'password' => 'secret') );
没有错误,没有任何事情发生。 当我要求查询日志时,这就在我的屏幕上:
[query] => CREATE USER ':username'@'localhost' IDENTIFIED BY ':password';
[bindings] => Array
(
[username] => johndoe
[password] => secret
)
[time] => 0.31
所以它看起来没问题,但实际的查询还没有... 这里有什么问题?
数据库日志输出:
204 Prepare CREATE USER '?'@'localhost' IDENTIFIED BY '?'
204 Close stmt
204 Quit
答案 0 :(得分:1)
大多数数据库服务器似乎都不支持DDL查询。检查:Can we use DDL Commands in a prepared statement (PostgreSQL)?
因此,手动清理用户输入是方法......:)
答案 1 :(得分:0)
我认为你不应该在绑定周围使用引号:
DB::statement('CREATE USER :username@\'localhost\' IDENTIFIED BY :password;',
array('username' => 'johndoe', 'password' => 'secret'));