我试图在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)
?>
答案 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);