数组

时间:2015-12-08 09:10:52

标签: php mysql arrays crud

嗨所以我有一个插入语句,它运行良好,但需要创建一个单独的更新函数,它使用数组键和数组值,这与插入函数非常相似,但更新。

我的插入

$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); 
    } 
?>

因此,我想获得有关更新功能的帮助。

所以我收到UPDATE语法错误

这是我正在努力的部分,我可以给出进一步的解释,但是我必须使用错误的语法来更新数据库,因为我在索引页面上单击编辑它调用函数只是语法不正确。

它的php到mySQL

PHP updatee fucntion的索引页

 {
     $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);
}

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

3 个答案:

答案 0 :(得分:5)

您无法以与INSERT相同的方式更新。它应该是这样的:

$('body').on({
    mouseenter: function () {
        var cellIndex = $(this).index();
        headerCells.eq(cellIndex).addClass("column-hover");
    },
    mouseleave: function () {
        var cellIndex = $(this).index();
        headerCells.eq(cellIndex).removeClass("column-hover");
    }
}, '.data, .item');

请参阅此处的详细信息http://dev.mysql.com/doc/refman/5.7/en/update.html

答案 1 :(得分:1)

我相信您使用的模式不正确?

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,你可能正在使用另一种语言。

答案 2 :(得分:0)

我想你可以尝试这样的事情:     $ 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;
        }