php mysql一次更新一个记录中的多个字段

时间:2017-10-06 14:45:34

标签: php mysql sql-update

我试图在MySQL数据库的记录中更新每个字段(16个字段加上密钥),并使用php从表单中获取一些新数据。 INSERT可以正常工作但是当我尝试更改为UPDATE时它不会这样做。我也觉得这是一个很长的路要走,而且可能有一个更迭代的解决方案,我真的很感激一些帮助请:

<?php
require_once 'login.php';
$con=mysqli_connect($hh,$un,$pw,$db);
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
echo 'Connected successfully';

$sql = "UPDATE PiBQ_Config 
        SET (upButton, dnButton, stepCore1, stepCore2, stepCore3, stepCore4, limSwitch, waitTime, maxPosn, pidKp, pidKi, pidKd, intMax, intMin, sleepTime, progRun) =
        ('$_POST[upButton]', '$_POST[dnButton]', '$_POST[stepCore1]', '$_POST[stepCore2]', '$_POST[stepCore3]', '$_POST[stepCore4]', '$_POST[limSwitch]', '$_POST[waitTime]', '$_POST[maxPosn]', '$_POST[pidKp]', '$_POST[pidKi]', '$_POST[pidKd]', '$_POST[intMax]', '$_POST[intMin]', '$_POST[sleepTime]', '$_POST[progRun]')
        WHERE tableKey = 1";

mysqli_query($con,$sql);

echo "1 record added";
header ('location: ../settings.php');

mysql_close($con)
?>

2 个答案:

答案 0 :(得分:0)

单独设置每个字段,例如:

"UPDATE PiBQ_Config 
        SET upButton = '$_POST[upButton]',
       dnButton ='$_POST[upButton]', 
      stepCore1 = '$_POST[dnButton]', 
    .
    . 
    .//the rest of variables
    WHERE tableKey = 1"

答案 1 :(得分:0)

此方法从三个参数创建一个查询:表名,一个关联数组,其列名为键,另一个whitch具有您要更新的列的名称作为where语句的键。

public function update($table, $data, $where)
{
    $query='UPDATE `'.$table.'` SET ';
    foreach($data as $key => $value)
    {
        $query .= '`'.$key.'`=:'.$key.','; 
    }
    $query = substr($query, 0, -1);
    $query .= ' WHERE ';
    foreach($where as $key => $value)
    {
        $query .= '`'.$key.'`=:'.$key.','; 
    }
    $query = substr($query, 0, -1);

    $data += $where;

    $update = $this->db->prepare($query);
    $update->execute($data);
}

它将构建一个查询并执行它。您应该使用PDO和预准备语句以获得更高的安全性。

示例:

例如,您要更新数据库中用户的名称。

$firstName = 'newFirstName';
$lastName = 'newLastName';
$id = idOfUserYouWantToUpdate;

$table = 'users';
$data = array('user_firstname'=>$firstName, 'user_lastname'=>$lastName);
$where = array('user_id'=>$id)

update($table, $data, $where);