2013-01-24 15 views
0

我不知道为什么在我的表中插入值不能使用foreach来遍历Json对象..当我看到表时,字段是空的。为什么不从Json对象插入数据?

JSON对象(从jquery.ajax)

[{"marca":"Cisco","producto":"UCS","subproducto":"Nexus"},"marca":"Citrix","producto":"Networking","subproducto":"Netscaler"}] 

的print_r($数据)

Array 
(
[0] => Array 
    (
     [marca] => Cisco 
     [producto] => UCS 
     [subproducto] => Nexus 
    ) 

[1] => Array 
    (
     [marca] => Citrix 
     [producto] => Networking 
     [subproducto] => Netscaler 
    ) 

) 

PHP代码

$data = json_decode($this->dataNewPoliza['alcances'], true); 

$marca; 
$producto; 
$subproducto; 

$sqlAlc = "INSERT INTO t_poliza_alcanceproductos VALUES (:idp,:m,:p,:s)"; 
$resultAlc = $this->dbConnect->prepare($sqlAlc) or die ($sqlAlc); 

foreach ($data as $key => $value) { 
    foreach ($value as $mps => $valuemps) { 
      if($mps == 'marca') { 
      $marca = $valuemps; 
     } 

     if($mps == 'producto') { 
      $producto = $valuemps; 
     } 

     if($mps == 'subproducto') { 
      $subproducto = $valuemps; 
     } 
    } 

    $resultAlc->bindValue(':idp',$id_poliza,PDO::PARAM_INT); 
    $resultAlc->bindValue(':m',$marca,PDO::PARAM_INT); 
    $resultAlc->bindValue(':p',$producto,PDO::PARAM_INT); 
    $resultAlc->bindValue(':s',$subproducto,PDO::PARAM_INT); 

    if(!$resultAlc->execute()) { 
     return false; 
    } else { 
     return true; 
    } 
} 

希望得到一些帮助。

解决

的问题是,我不能这样做返回的foreach内假性还是真性和说@zerkms,我不需要嵌套循环,这是最终的结果:

$data = json_decode($this->dataNewPoliza['alcances'], true); 

$sqlAlc = "INSERT INTO t_poliza_alcanceproductos VALUES (:idp,:m,:p,:s)"; 

$resultAlc = $this->dbConnect->prepare($sqlAlc) or die ($sqlAlc); 

foreach ($data as $key => $value) { 
    $resultAlc->bindValue(':idp',$id_poliza,PDO::PARAM_INT); 
    $resultAlc->bindValue(':m',$value['marca'],PDO::PARAM_INT); 
    $resultAlc->bindValue(':p',$value['producto'],PDO::PARAM_INT); 
    $resultAlc->bindValue(':s',$value['subproducto'],PDO::PARAM_INT); 

    $resultAlc->execute(); 
} 

return true; 

感谢您的帮助!

+0

发现'$值“马卡报”]',你嵌套循环做什么是无稽之谈 – zerkms

+0

我zerkms同意也是它正常的$ id_poliza未设置在我们的代码(可能设置在前面没有?) – charly

+0

可以给我一个你如何能做得更好的例子吗?是的,$ id_poliza在该代码之前声明。 – SoldierCorp

回答

1

PDOStatement :: bindValue数据类型错误,$ marca,$ product,$ subproducto是字符串不是整数。

$resultAlc->bindValue(':m',$marca,PDO::PARAM_STR); 

也许你应该看看PDOStatement::bindValue

+0

是的,纠正了,但现在循环只运行1次,只有1个数组插入表 – SoldierCorp

+0

$ resultAlc-> execute print PDO :: errorInfo获取与数据库句柄上最后一个操作相关的扩展错误信息 – Kai

+0

已解决,请参阅文章编辑!谢谢:) – SoldierCorp