尝试在Laravel中使用mysql_real_escape_string()
时出现数据库连接错误。 Fluent查询正常工作,因此我假设数据库已正确配置。
如何从Laravel使用mysql_real_escape_string()
?我正在使用它来逃避我需要自己构建的SQL查询中的值,因为Fluent的限制。
构建我自己的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)
答案 0 :(得分:10)
改为使用DB::connection()->getPdo()->quote()
。
答案 1 :(得分:4)
mysql_real_escapes_string()
使用由mysql_connect()
创建的数据库链接,因此只有在您调用mysql_connect()
后才能使用它。
关于此的重要说明(来自评论):
..但不应该在PDO是首选数据库驱动程序的环境中使用。实际上,不应再使用mysql_connect()了。 - 罗宾诉G。
答案 2 :(得分:3)
我的解决方案:
将此添加到composer.json中的自动加载:
"files": [
"app/lib/helpers.php"
],
添加此功能(在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;
}
}
php artisan dump-autoload
现在,您可以在代码中的任何位置使用mysql_escape。
答案 3 :(得分:2)
Laravel使用PDO,所以没有逃避,只是准备好的陈述。请参阅Laravel manual on databases。