1

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 つの領域(会計、コマーシャル、エントレガ)があり、それぞれに 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.

私の方法が間違っているのかもしれません。これを行う方法があれば、感謝しています。

編集済み

システムに応じていくつかの値を機能的に変更することで問題を解決しましたが、皆さんに感謝します。

4

1 に答える 1

1

5回ループした後に0にリセットできるカウンターをもう1つ追加する必要があると思います。これを試して -

$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

于 2013-07-21T05:17:44.917 に答える