Ранее я вставлял данные из 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,
));