为什么不从Json Object插入数据?

时间:2013-01-24 23:42:57

标签: php mysql json object pdo

我不知道为什么我的表中的插入值无法使用foreach遍历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中返回false或true,并且如@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;

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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

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

也许你应该看PDOStatement::bindValue