【问题标题】:Raw mysql statement with bindings in Laravel在 Laravel 中带有绑定的原始 mysql 语句
【发布时间】:2015-02-15 23:37:59
【问题描述】:

我正在尝试向 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

【问题讨论】:

    标签: php mysql laravel


    【解决方案1】:

    看起来大多数数据库服务器正式不支持 DDL 查询。检查:Can we use DDL Commands in a prepared statement (PostgreSQL)?

    因此,手动清理用户输入是可行的方法... :)

    【讨论】:

      【解决方案2】:

      我认为你不应该在绑定周围使用引号:

      DB::statement('CREATE USER :username@\'localhost\' IDENTIFIED BY :password;',
                     array('username' => 'johndoe', 'password' => 'secret'));
      

      【讨论】:

      • 好的...只是为了确定,如果你在没有绑定的情况下编写它,它可以工作吗?
      • 可以看一下你的数据库服务器的查询日志吗?
      • ?周围不带引号试试
      • 但我不认为他们在使用绑定时。否则? 将被解释为字符串,不是吗?
      猜你喜欢
      • 2019-06-29
      • 2017-03-22
      • 2015-09-08
      • 2014-08-20
      • 2015-06-08
      • 2018-10-30
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多