класс 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);

Надеюсь, это будет полезно, еще раз спасибо калькулон.

Author: Engineeroholic, 2013-12-01

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);
 1
Author: calculon, 2013-12-05 10:56:44