使用 PHP PDO 解码后将整个 JSON 插入数据库

Posted

技术标签:

【中文标题】使用 PHP PDO 解码后将整个 JSON 插入数据库【英文标题】:Insert entire JSON to database after decode using PHP PDO 【发布时间】:2013-07-20 00:29:07 【问题描述】:

我想从 jquery.ajax 插入这个 json(索引 VALOR 的内容并不总是有数据):

[

    "input": "calleFiscal",
    "valor": ""
,

    "input": "numFiscal",
    "valor": "numero fiscal"
,

    "input": "colFiscal",
    "valor": ""
,

    "input": "delefacionFiscal",
    "valor": ""
,

    "input": "estadoFiscal",
    "valor": "11"
,

    "input": "calleComercial",
    "valor": "calle comercial"
,

    "input": "numComercial",
    "valor": ""
,

    "input": "colComercial",
    "valor": ""
,

    "input": "delefacionComercial",
    "valor": ""
,

    "input": "estadoComercial",
    "valor": "3"
,

    "input": "calleEntrega",
    "valor": ""
,

    "input": "numEntrega",
    "valor": ""
,

    "input": "colEntrega",
    "valor": "colonia entrega"
,

    "input": "delefacionEntrega",
    "valor": ""
,

    "input": "estadoEntrega",
    "valor": "11"

]

是通过使用 jquery 映射一个 div 创建的,我尝试用这个插入数据库:

$addresses = json_decode($this->dataActionClient['addresses'],true);

$sqlAd = "INSERT INTO t_direcciones_clientes (Id_Cliente,Calle,Numero,Colonia,Municipio,Estado,Tipo) VALUES (:idc,:calle,:num,:col,:deleg,:edo,:tipo)";
$resultAd = $this->dbConnect->prepare($sqlAd) or die ($sqlAd);

$fields = array('calle','num','col','deleg','edo');
$types = array('fiscal','comercial','entrega');

$resultAd->bindParam(':idc',$id_cliente,PDO::PARAM_INT);
$counType = 0;

foreach ($addresses as $key => $value) 
    $key++;
    $resultAd->bindParam(':'.$fields[$key], $value['valor']);
    if ($key == 4 || $key == 9) 
        $resultAd->bindParam(':tipo', $types[$counType]);
        $counType++;
        $resultAd->execute();
    

该代码的解释:

我有 3 个领域 (财政、商业、entrega),每个领域都有 5 个输入 (Calle、Numero、Colonia、Municipio、Estado、Tipo) 那么我需要在表中插入 3 行,这 3 行具有相同的 Id_Cliente,但具有不同的 Tipo 和 5 个输入的不同内容。 但不起作用,并显示此错误:

Tried to bind parameter number 0. SQL Server supports a maximum of 2100 parameters.

也许我的方法是错误的,如果有任何方法可以做到这一点,我很感激。

已编辑

我解决了我根据系统功能更改一些值的问题,但感谢大家。

【问题讨论】:

当然.. 等一下,我忘了多放两行 您正在使用问号占位符 - ?,但创建/使用命名占位符 ':'.$fields[$key]??此外,bindParam() 使用 1-index,其中您的数组是 0-index(我相信您的错误是在声明 Tried to bind parameter number 0),因此您可能需要将密钥增加 1。 嗯,我的第一条评论是错误的,你没有绑定 2 个参数,而是 5,当 $key 达到 4 时,语句正在执行,所以你是 2 短......以及@Sean 所说的;) 我更新了我的代码! @肖恩 我更新了我的代码! @dbf 【参考方案1】:

我认为您需要再添加 1 个计数器,以便在 5 次循环后重置为 0。试试这个 -

$counField = 0; // counter to access field array, will be reset to 0 after 5 loops
$counType = 0;

foreach ($addresses as $key => $value) 
    $resultAd->bindParam(':'.$fields[$counField], $value['valor']);
    if ($key == 4 || $key == 9 || $key == 14) 
        $resultAd->bindParam(':tipo', $types[$counType]);
        $counType++;
        $counField++; // increase if the last of 5 loops
        $resultAd->execute();
    
    else 
        $counField++; // increase if not the last of 5 loops 
    

这是一个显示结果的 phpFiddle 示例 - http://phpfiddle.org/main/code/k4b-nja

【讨论】:

谢谢,但我以不同的方式解决了我的答案,并在编辑后的帖子中发布了我的正确答案。但是感谢您的宝贵时间。

以上是关于使用 PHP PDO 解码后将整个 JSON 插入数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP PDO 在 mySQL 中插入多行 JSON 对象数据?

PDO json插入多个标签

在 PHP 中将 PDO 记录集转换为 JSON [重复]

使用 Gson 解析后将嵌套的 JSON 数组插入 SQLite

如何使用 PDO 从 php 文件中插入数据?

使用 php 和 pdo 插入的表单