gpt4 book ai didi

php 类将值数组插入 oracle DB

转载 作者:行者123 更新时间:2023-12-04 18:08:29 24 4
gpt4 key购买 nike

我正在尝试构建一个将值数组插入到 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);)

  • setTableName 显然是为了定义所需的表。

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

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

我不知道如何将变量绑定(bind)到键中?知道变量的数量是动态的吗?

任何帮助将不胜感激

更新:

$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。

最佳答案

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

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

关于php 类将值数组插入 oracle DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20309909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com