我正在尝试构建一个将值数组插入到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显然是用于定义所需的表。
现在我有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。
答案 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);