在Laravel中转义带引号的字符串

9

我希望将excel文件的内容插入到我的数据库中。

我只是使用了一个原始查询来实现这个目标。


控制器函数

public function uploadExcel()
{
    $filename = Input::file('import_file')->getRealPath();

    $file = fopen($filename, "r");

    $count = 0;
    while (($emapData = fgetcsv($file, 10000, "\t")) !== FALSE) {
        $count++;

        if($count>1) {
            DB::statement("INSERT INTO `members` (
                member_title,
                member_first_name,
                member_name_affix,
                member_last_name,
                member_private_address,
                member_private_zip_code,
                member_private_location,
                member_private_phone,
                member_private_mobile,
                member_private_fax,
                member_private_mail,
                member_business_position,
                member_business_name,
                member_business_address,
                member_business_zip_code,
                member_business_location,
                member_business_area_code,
                member_business_phone,
                member_business_fax,
                member_business_mobile,
                member_business_mail,
                member_join_date,
                extra
            ) VALUES (
                '$emapData[0]',
                '$emapData[1]',
                '$emapData[2]',
                '$emapData[3]',
                '$emapData[4]',
                '$emapData[5]',
                '$emapData[6]',
                '$emapData[7]',
                '$emapData[8]',
                '$emapData[9]',
                '$emapData[10]',
                '$emapData[11]',
                '$emapData[12]',
                '$emapData[13]',
                '$emapData[14]',
                '$emapData[15]',
                '$emapData[16]',
                '$emapData[17]',
                '$emapData[18]',
                '$emapData[19]',
                '$emapData[20]',
                '$emapData[21]',
                '$emapData[22]'
            )");
        }
    }
    return redirect('index.index');
}



我的问题:Excel文件中有像Mc'Neal之类的名字,因此我收到了一个错误消息。
在laravel中如何转义撇号?

我对laravel非常陌生,希望能得到任何形式的帮助!


为什么不填充“member”模型并保存()? - Mark Baker
2个回答

9

不!谢谢你!!但是,我必须将一个字符串传递给该函数,而$emapData是一个数组。 - Schwesi
2
尝试使用以下代码 array_map( "escapeFunction" ,$emapData) ... 参考链接:http://php.net/manual/en/function.array-map.php - Sherif
谢谢!我在这里找到了解决方案 -> http://stackoverflow.com/questions/19210833/php-addslashes-using-array - Schwesi
3
这不是最佳方法。你提供的链接上明确指出:“addslashes() 有时被错误地用于尝试防止 SQL 注入。相反,应该使用特定于数据库的转义函数和/或预处理语句。”你可能需要的是:https://www.php.net/manual/en/mysqli.real-escape-string.php - ShaneMit
addslashes 不适合用于转义数据库内容,正如 @ShaneMit 所指出的那样。 - Elliot

2

为了在MS SQL中转义带有单引号的字符串,我们需要通过添加另一个单引号来进行转义。

以下函数可以实现此操作。因此,您可以尝试使用此函数:

public static function mssql_escape($unsafe_str) 
{
    if (get_magic_quotes_gpc())
    {
        $unsafe_str = stripslashes($unsafe_str);
    }
    return $escaped_str = str_replace("'", "''", $unsafe_str);
}
//for example $unsafe = "AB'CD'EF";
$escaped = mssql_escape($unsafe);
echo $escaped;// Would output the escaped string as  "AB''CD''EF"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接