PHP 用数组更新语句

PHP update statement with arrays

你好,我有一个运行良好的插入语句,但需要创建一个单独的更新函数,它使用数组键和数组值,这很像插入函数,但更新。

我有这个插入

$sql = "INSERT INTO $tablename (".implode(",", array_keys($DATA).")" . " DATA ('".implode("','",array_values($DATA))."')";
connect()->query($sql); 

这是我到目前为止的更新内容,但我坚持使用它,

<?php
    function updatethis (array $id, array $values, $tablename)
    {
        $sql = "UPDATE $tablename SET (".implode(",", array_keys($DATA)).")" . " DATA ('".implode("','",array_values($DATA))."')";
        dbconnect()->query($sql); 
    } 
?>

因此,我需要有关更新功能的帮助。

所以我收到更新语法错误

这是我正在努力解决的部分,我可以给出进一步的解释,但是我一定是在索引页面上单击编辑后输入了错误的语法来更新数据库它调用了函数只是语法不正确.

还有它的 php 到 mySQL

PHP 更新功能的索引页

 {
     $values = array();
     $idValues = array($idColumn => $id);
     foreach($_POST as $key => $value)
     {
         if(!empty($value) && ($value != "Submit"))
         {
             $values[$key] = $value;
         }
     } 
     $result = update($idValues, $values, $tableName);
 }

编辑:我遇到错误 从下方编辑未成功

  if(isset($_POST['Submit']))
                {
                    if($result>0)
                    {
                        echo 'Edit has been successful.  Return to index page';
                    }
                    else
                    {
                        echo 'Edit has not been successful.';
                    }
                }

我的代码

function updateAll(array $id, array $values, $tablename)
{
    $sIDColumn  = key($id);
    $sIDValue   = current($id);
    $arrayValues = $values;
    array_walk($values, function(&$value, $key){
        $value = "{$key} = '{$value}'";
    });
    $sUpdate = implode(", ", array_values($values));
    $sql        = "UPDATE {$tablename} SET {$sUpdate} WHERE {$sIDColumn} = '{$sIDValue}'";


    connect()->query($sql);
}

我的目标:将要编辑的行的唯一标识符作为一个数组输入,然后是值加上表示主键的列名,一个包含由列名索引的值的数组以及表示 table 名称的字符串,使用 array_keys 和 array_vaules 就像插入但要更新

我想你可以尝试这样的事情: $champs :要更新的字段数组 $valeurs :要更新字段的值数组 $conditions : 条件数组

 protected function modify($table,$champs,$valeurs,$conditions){
            $Requete = "UPDATE ".$table." SET ";
            $nbChamps = count($champs);
            $nbValeurs = count($valeurs);
            if($nbChamps == $nbValeurs){
                for($i = 0; $i < $nbChamps ; $i++){
                    if($i < ($nbChamps - 1)){
                        if(is_numeric($valeurs[$i]))
                            $Requete = $Requete.$champs[$i]." = ".$valeurs[$i].",";
                        else
                            $Requete = $Requete.$champs[$i]." = '".$valeurs[$i]."',";
                    }
                    else
                        if(is_numeric($valeurs[$i]))
                            $Requete = $Requete.$champs[$i]." = ".$valeurs[$i]." ";
                        else
                            $Requete = $Requete.$champs[$i]." = '".$valeurs[$i]."' ";
                    }
                    $Requete = $Requete.$this->genereConditions($conditions);
                    $this->db->query($Requete);
                }
                else
                    throw new Exception("Le nombre de champs n'est pas identique au nombre de valeurs", 1); 
            }

    private function genereConditions($conditions){
            $condition = "WHERE ";
            for($i = 0 ; $i < count($conditions); $i++){
                if($i < (count($conditions)) - 1)
                    $condition = $condition.$conditions[$i]." AND ";
                else
                    $condition = $condition.$conditions[$i];
            }
            return $condition;
        }

我认为您使用的模式不正确?

UPDATE table SET (rows) DATA ('values');

我认为更新更像这样:

UPDATE table SET row1 = 'value1', row2 = 'value2';

在这种情况下,这可能更接近您要查找的内容。

function updatethis(array $id, array $values, $tablename)
{
    $sIDColumn  = key($id);
    $sIDValue   = current($id);
    $arrayValues = $values;
    array_walk($values, function(&$value, $key){
        $value = "{$key} = '{$value}'";
    });
    $sUpdate = implode(", ", array_values($values));
    $sql        = "UPDATE {$tablename} SET {$sUpdate} WHERE {$sIDColumn} = '{$sIDValue}'";
    dbconnect()->query($sql);
}

使用它,我得到这个查询:

$testArray = array(
    "id" => 19,
    "username" => "test"
);
updatethis(array("id" => 9), $testArray, "users");

UPDATE users SET id = '19', username = 'test' WHERE id = '9'

我希望这至少能有所帮助,但在涉及数据库时,我只知道 MySQL,而且您可能使用的是另一种语言。

您不能以与 INSERT 相同的方式进行 UPDATE。应该是这样的:

$valueSets = array();
foreach($values as $key => $value) {
   $valueSets[] = $key . " = '" . $value . "'";
}

$conditionSets = array();
foreach($id as $key => $value) {
   $conditionSets[] = $key . " = '" . $value . "'";
}

$sql = "UPDATE $tablename SET ". join(",",$valueSets) . " WHERE " . join(" AND ", $conditionSets);

在此处查看详细信息http://dev.mysql.com/doc/refman/5.7/en/update.html