bindParam在foreach关闭

时间:2011-10-16 13:25:35

标签: php sql

我有一个函数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();}
}



}

提前谢谢。

2 个答案:

答案 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