php类向oracle DB插入值数组

时间:2013-12-01 07:43:51

标签: php arrays 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 //

    }
}
  • 构造函数将通过从db_connection类调用$ conn对象来获取数据库连接(例如$ conn = new db_connection(); $ query = new ArrayQuery($ conn);)

    < / LI>
  • setTableName显然是用于定义所需的表。

  • 现在是ArrayQuery,我在表单页面中所做的,我将数组的键命名为与表中列的名称相同,例如array args ['id'] = $ _post ['id']。所以基本上 array_key =列名。我这样做是为了获取列名而无需手动设置它们。

现在我有2个数组: $ keys (保存列的名称), $ values (保存要插入的数据)。

我无法弄清楚如何将变量绑定到键中?知道变量的数量是动态的吗?

任何帮助将不胜感激

更新

以下是如何设置$ 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);

希望它会有所帮助,再次感谢calculon。

1 个答案:

答案 0 :(得分:1)

大概这样的算法,用于在我的项目中使用未知数量的列插入一行,对于多行,应该再添加一个循环

$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);