Как избежать одиночной кавычки в запросе laravel Raw - PullRequest
0 голосов
/ 17 апреля 2019

Ранее я вставлял данные из csv в базу данных, используя eloquent.Тем не менее, я чувствую, что это довольно медленно, поэтому я пытаюсь протестировать его с помощью Raw Query следующим образом в laravel:

$query = Committee::where('name', $committee_arr['name']);

if ($committee_arr['mailing_address_city']) {
    $query->where('mailing_address_city', $committee_arr['mailing_address_city']);
}
if ($committee_arr['mailing_address_state']) {
    $query->where('mailing_address_state', $committee_arr['mailing_address_state']);
}
if ($committee_arr['mailing_address_zip']) {
    $query->where('mailing_address_zip', $committee_arr['mailing_address_zip']);
}

$committee = $query->first();

if ($committee) {
    $committee_arr['updated_at'] = date('Y-m-d H:i:s');
    $committee_arr['updated_by'] = $this->data['user_id'];
    try {
        $valueSets = array();
        foreach ($committee_arr as $k => $v) {
            $valueSets[] = $k . " = '" . $v . "'";
        }
        DB::update("Update `fec` set " . implode(", ", $valueSets) . " where id = " . $committee->id);
        $committee_id = $committee->id;
    } catch (\Exception $e) {
        $error_encountered = true;
        $this->error_arr[] = $e->getMessage();
        $this->error_row_numbers[] = $this->data['row_value'];
    }

} else {
    $committee_arr['created_at'] = date('Y-m-d H:i:s');
    $committee_arr['created_by'] = $this->data['user_id'];
    try {
        $columns = implode(", ", array_keys($committee_arr));
        $values = "'" . implode("', '", array_values($committee_arr)) . "'";
        DB::insert("INSERT INTO `fec`($columns) VALUES ($values)");
        $committee_id = DB::getPdo()->lastInsertId();
    } catch (\Exception $e) {
        $error_encountered = true;
        $this->error_arr[] = $e->getMessage();
        $this->error_row_numbers[] = $this->data['row_value'];
        DB::rollback();
    }

}

Однако в этом процессе я сталкиваюсь с одной проблемой этих одинарных кавычек.Я не знаю, как использовать mysqli_real_escape_string в Laravel.Я также заметил около addslashes, но я не чувствую, что это идеальный способ.

Итак, есть ли способ справиться с этим?Более того, если у вас есть идея вставить что-то вроде привязки параметра, тогда добро пожаловать.

Если вам интересно, что же содержит $committee_arr, то это выглядит так:

Array
(
    [name] => O'KANE, PATRICK M
    [mailing_address_city] => SAN ANTONIO
    [mailing_address_state] => TX
    [mailing_address_zip] => 782583940
    [employer] => ENERGY TRANSFER EMPLEE MGMT CO
    [occupation] => SR DIRECTOR - PL HEDGNG/COMMOD
)

Дальнейшее уточнение:

Моя главная задача - правильно обращаться с O'Kane.Но, если я должен сказать это точно, то я хочу справиться с чем-то вроде ниже.Но проблема в том, что эти поля и значения являются полностью динамическими.Это будет в массиве, как показано выше.Не ограничиваясь шестью полями и значениями, их может быть и больше.

$results = DB::select( DB::raw("SELECT * FROM some_table WHERE some_col = :somevariable"), array(
   'somevariable' => $someVariable,
 ));

1 Ответ

0 голосов
/ 17 апреля 2019

Попробуйте функцию addlashes () для ассоциативного массива, как показано ниже.

$committee_arr=array_map('addslashes', $committee_arr);
print_r($committee_arr);

Вы получите массив, как показано ниже.

Array
(
    [name] => O\'KANE, PATRICK M
    [mailing_address_city] => SAN ANTONIO
    [mailing_address_state] => TX
    [mailing_address_zip] => 782583940
    [employer] => ENERGY TRANSFER EMPLEE MGMT CO
    [occupation] => SR DIRECTOR - PL HEDGNG/COMMOD
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...