嗨所以我有一个插入语句,它运行良好,但需要创建一个单独的更新函数,它使用数组键和数组值,这与插入函数非常相似,但更新。
我的插入
$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的表名的字符串,如插入但更新
答案 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;
}