PHP PDO多重更新查询将垃圾插入表中

PHP PDO多重更新查询将垃圾插入表中,php,json,insert,pdo,Php,Json,Insert,Pdo,我从客户端接收到一个JSON对象,它以随机顺序包含一个位置的属性 几乎地址的每个组成部分都可以跟在后面,也可以跟在前面。 例如:国家可能在国家之前或之后,城市可能在两者之间的任何地方 所以我创建了一个函数,它动态地将每个参数绑定到它所属的位置。 但出于某种原因,我在数据库中得到的唯一东西是垃圾正整数和负整数 通过回显生成的查询和绑定值进行简单的调试并没有多大帮助 以下是输出示例(首先是查询,然后是以下形式的绑定参数): :param---value): 代码: Mysql不支持多个更新或多个查询

我从客户端接收到一个JSON对象,它以随机顺序包含一个位置的属性

几乎地址的每个组成部分都可以跟在后面,也可以跟在前面。 例如:国家可能在国家之前或之后,城市可能在两者之间的任何地方

所以我创建了一个函数,它动态地将每个参数绑定到它所属的位置。 但出于某种原因,我在数据库中得到的唯一东西是垃圾正整数和负整数

通过回显生成的查询和绑定值进行简单的调试并没有多大帮助

以下是输出示例(首先是查询,然后是以下形式的绑定参数): :param---value):

代码:

Mysql不支持多个更新或多个查询(我的默认设置)。
您需要单独运行这些更新
我知道现在你已经在分别运行它们了。你知道很难用你的大脑而不是电脑来运行代码

除了这段代码的问题之外,为什么不使用一些数据库包装器呢?使代码尽可能简单

function updateMultipile($table, $data = array())
{
    $db = DBLink::getInstance();
    foreach($data as $id => $update)
    {
        $sql = "UPDATE ?n SET ?u WHERE location_id = ?i";
        $db->query($table,$update,$id); 
    }
}

无论如何,问题似乎是我多次尝试执行同一语句,或者bindParam在foreach循环中不起作用,如果提供了值($myValue),我会使用$value[$myKey],因为此函数接收引用而不是值

无论如何,我已经决定,在这种情况下,对于我的需要,bindValue就足够了

工作起来很有魅力

函数updateMultipile($table,$data=array()){


您好,我的函数处理一个二维数组,在这种情况下,用户选择一次更新多个位置。除此之外,它几乎是一样的。我明白了。它最终也是不可读的。并且比它应该的大10倍。
function updateMultipile($table, $data = array()){

    $update_query = array();
    $i = 0;
    foreach($data as $key => $value){
        $sql = "UPDATE $table SET ";
            foreach($value as $column => $updatedValue){
                $sql .= $column . " = :" . $column . ",";
            }
            $sql = rtrim($sql, ", ");

        $sql .= " WHERE location_id = " . intval($key); 
        $update_query[$i] = $sql;
        $i++;
    }

    try{
        $conn = DBLink::getInstance();
        $j = 0;
        $success = 0;
        foreach($data as $fieldset => $value){
            echo('[1]');
            $sth = $conn->prepare($update_query[$j]);
            echo $update_query[$j] . "+++";
            foreach($value as $key => $myValue){
                $myKey = ':' . $key;
                $sth->bindValue($myKey, $myValue); //PDO::PARAM_STR);
                echo($myKey . " --- " . $myValue);
            }   
            if($sth->execute()){
                $success++;
            }
            else{
                echo $sth->errorCode();
            }

            $j++;
        }   
    }
    catch(PDOException $err){
        echo $err::getMessage;
    }   

    return $success;
}
function updateMultipile($table, $data = array())
{
    $db = DBLink::getInstance();
    foreach($data as $id => $update)
    {
        $sql = "UPDATE ?n SET ?u WHERE location_id = ?i";
        $db->query($table,$update,$id); 
    }
}
    $update_query = array();
$i = 0;
    foreach($data as $key => $value){
        $sql = "UPDATE $table SET ";
            foreach($value as $column => $updatedValue){
                $sql .= $column . " = :" . $column . ",";
            }
            $sql = rtrim($sql, ", ");

        $sql .= " WHERE location_id = " . intval($key); 
        $update_query[$i] = $sql;
        $i++;
    }

try{
    $conn = DBLink::getInstance();
    $j = 0;
    $success = 0;
    foreach($data as $fieldset => $value){
        $sth[$j] = $conn->prepare($update_query[$j]);
        foreach($value as $key => $myValue){
            $myKey = ':' . $key;
            $sth[$j]->bindValue($myKey, $myValue); //PDO::PARAM_STR);

        }   
        if($sth[$j]->execute()){
            $success++;
        }
        else{
            echo $sth[$j]->errorCode();
        }

        $j++;
    }   
}
catch(PDOException $err){
    echo $err::getMessage();
}   

return $success;
}