带有Laravel绑定的原始mysql语句

时间:2015-02-15 23:38:00

标签: php mysql laravel

我试图向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

2 个答案:

答案 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'));