3

尝试mysql_real_escape_string()在 Laravel 中使用时出现数据库连接错误。Fluent 查询正常工作,因此我假设数据库已正确配置。

应该如何mysql_real_escape_string()从 Laravel 中使用?由于 Fluent 的限制,我正在使用它来转义我需要自己构建的 SQL 查询中的值。

构建我自己的 SQL 查询的 PHP 代码

    foreach($listings as $listing) {
        $listing = get_object_vars($listing);
        $query = 'INSERT IGNORE into archive ';
        $query .= '(' . implode(',', array_keys($listing)) . ') ';
        $query .= 'VALUES(' . implode(',', array_values( array_map('mysql_real_escape_string', $listing) )) . ')';
        DB::query($query);
    }

错误

mysql_real_escape_string() [function.mysql-real-escape-string]: 
Access denied for user 'nobody'@'localhost' (using password: NO)
4

4 回答 4

16

改为使用DB::connection()->getPdo()->quote()

于 2014-01-07T10:43:29.823 回答
5

我对此的解决方案:

  1. 在 app/lib/helpers.php 中创建自定义帮助文件
  2. 将此添加到 composer.json 中的自动加载:

    "files": [
        "app/lib/helpers.php"
    ],
    
  3. 添加此功能(在 php.net 上找到)

    if ( !function_exists('mysql_escape'))
    {
        function mysql_escape($inp)
        { 
            if(is_array($inp)) return array_map(__METHOD__, $inp);
    
            if(!empty($inp) && is_string($inp)) { 
                return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $inp); 
            } 
    
            return $inp; 
        }
    }
    
  4. php artisan dump-autoload

现在您可以在代码中的任何地方使用 mysql_escape。

于 2013-05-09T22:22:02.703 回答
5

mysql_real_escapes_string()使用创建的数据库链接mysql_connect(),所以它只能在你调用之后使用mysql_connect()

关于这一点的重要说明(来自评论):

.. 但不应在选择 PDO 为数据库驱动程序的环境中使用。事实上, mysql_connect() 根本不应该再使用了。– 罗宾诉 G.

于 2012-09-27T14:02:24.117 回答
3

Laravel 使用PDO,所以没有转义,只是准备好的语句。请参阅有关数据库的 Laravel 手册

于 2012-09-27T14:01:09.747 回答