класс php для вставки массива значений в базу данных oracle
Я пытаюсь создать класс, который вставляет массив значений в базу данных oracle, я также пытаюсь сделать класс масштабируемым (работает со всеми формами приложения).
Причина, по которой я это делаю, заключается в том, чтобы уменьшить повторение кода для приложения, над которым я работаю, , потому что в нем много форм, и в некоторых из них много переменных (50+).. поэтому мне нужно создать класс, способный вставлять значения в таблицу, где количество значений является динамическим (в зависимости от формы).
До сих пор я делал следующее:
class ArrayQuery {
public $conn;
public $table;
public function __construct($conn){
$this->conn = $conn;
}
public function setTableName($table)
{
$this->table = $table;
}
public function InsertArray(array $args){
$keys = array_keys($args);
$values = array_values($args);
// need help here //
}
}
Функция построения получит подключение к базе данных, вызвав объект $conn из класса db_connection (например, $conn =новый db_connection(); $query = новый запрос массива ($conn);)
Имя параметра, очевидно, предназначено для определения нужной таблицы.
- теперь в запросе ArrayQuery, что я сделал на своей странице формы, я назвал ключи массива так же, как имена столбцов в таблице, например массив аргументов['id']= $_post['id']. так что в основном array_key = имя столбца . Я сделал это для того, чтобы получить имена столбцов, не задавая их вручную.
Теперь у меня есть 2 массива: $ключи (содержит имена столбцов) и $значения (содержит данные для вставки).
Я не могу понять как связать переменные с ключами? зная, что количество переменных является динамическим?
Любая помощь будет очень полезной ценится
ОБНОВЛЕНИЕ:
Вот как задается массив $args
$args = array(
'id' => $_POST['id'],
'firstname' => $_POST['firstname'],
'lastname' => $_POST['lastname'],
'email' => $_POsT['email'],
)
Ответ:
Спасибо @calculon за то, что наставил меня на правильный путь, с небольшими изменениями для работы в моем сценарии, для дальнейшего использования ответ на мой случай таков:
$i=0; $col=''; $val='';
foreach ($args as $key => $value) {
if($i==0){
$col .= $key;
$val .= ':'.$key;
}
else{
$col .= ', '.$key;
$val .= ', :'.$key;
}
$i++;
}
$sql = 'INSERT INTO '.$table.' ('.$col.') VALUES ('.$val.') ';
$stmt = oci_parse($this->conn, $sql);
foreach ($args as $key => $value) {
oci_bind_by_name($stmt, $key, $args[$key]) ;
}
oci_execute($stmt);
Надеюсь, это будет полезно, еще раз спасибо калькулон.
1 answers
Примерно такой алгоритм вставки одной строки с неизвестным количеством столбцов я использовал в своем проекте, для нескольких строк следует добавить еще один цикл
$i=0; $keys=''; $vals='';
foreach ($args as $key => $value) {
if($i==0){
$keys .= ''.$key;
$vals .= ':'.$key;
}
$keys .= ', '.$key;
$vals .= ', :'.$key;
$i++;
}
$sql = 'INSERT INTO '.$table.' ('.$keys.') VALUES ('.$vals.') ';
$stmt = oci_parse($conn, $sql);
foreach ($args as $key => $value) {
oci_bind_by_name($stmt, $key, $args[$key]) ;
}
oci_execute($stmt);