我有一个函数addIt,它将数据添加到数据库中,无论表的名称或字段数是多少。
此函数获取表的名称和字段名称,并构建命令的字符串,然后扫描来自表单的POST变量。
然后它需要在执行之前使用语句bindParams。
foreach($data as $k=>$v){
$stmt->bindParam(':'.$result[$i],$v);
$i++;
}
$ data是包含所有$ _POST变量的表。 $ result是包含所有字段名称的表
如果title是表格字段的名称,那么':' .result [$ i],':title',与$ v绑定(例如$ v == $ _ POST [' title'])
foreach用于为所有变量重复相同的过程。
但我遇到了问题,表中的字段获取了最后一个POST变量的值。
所以,如果表单发送了这些变量:$ _POST [' title'],$ _POST [' TEXTE']和title =" hello" ,texte ="世界"
表格中的字段将采用以下值:title =" world",texte =" world"
如果您想查看完整版的类代码:
<?php
class add{
/*******************FUNCTION GET FIELDS**********************/
private function getFields($tbl){
try{
require 'global/connection.inc.php';
$cmd='DESCRIBE '.$tbl;
$fields=array();
$i=0;
foreach($pdo->query($cmd) as $r){
if ($r[0]!='views' && $r[0]!='votes'){
$fields[$i]=$r[0];
}
$i++;
}
return $fields;
}
catch(PDOException $e){}
}
/***********************FUNCTION GETDATA************************/
private function getData(){
$data=array();
$i=0;
foreach($_POST as $k){
$data[$i]=$k;
$i++;
}
return $data;
}
/**************************FUNCTION ADDIT************************/
function addIt($tbl){
require 'global/connection.inc.php';
try{
/*********create object add and get Fields names and POST data*****************/
$object=new add();
$result=$object->getFields($tbl);
$data=$object->getData();
/***************Build the sql command*****************************************/
$fields='';
$cmd='INSERT INTO '.$tbl;
$i=0;
foreach($result as $k=>$v){
if ($i<count($result)-1 && $i!=0){
$fields.=$v.',';
}
if ($i==count($result)-1){
$fields.=$v;
}
$i++;
}
$values='';
$i=0;
foreach($result as $k=>$v){
if ($i<count($result)-1 && $i!=0){
$values.=':'.$v.',';
}
if ($i==count($result)-1){
$values.=':'.$v;
}
$i++;
}
$cmd=$cmd.'('.$fields.')VALUES('.$values.')';
echo $cmd.'<br/>';
/**************************bind params and execute command******************************/
$stmt=$pdo->prepare($cmd);
$i=1;
foreach($data as $k=>$v){
$n=$v.'';
$stmt->bindParam(':'.$result[$i],$n); //The problem is here
$i++;
}
$stmt->execute();
}
catch(PDOException $e){echo $e->getMessage();}
}
}
提前谢谢。
答案 0 :(得分:2)
我不确定,但我猜问题是由于在getFields中使用起始索引$ i为0; 但是在你有问题的循环中,$ i从1开始。也许在getFields方法中,$ i增量必须在if块中。
答案 1 :(得分:1)
尝试..
foreach($data as $k=>&$v){
$stmt->bindParam(':'.$result[$i],$v.''); //The problem is here
$i++;
}
请参阅A problem while bind params for PDO statement inside loop