Php 动态更新数据
出错Php 动态更新数据,php,Php,出错 public function update($id, $table, $data, $exclude = array()){ $query = "UPDATE $table SET"; $fields = $values = array(); if( !is_array($exclude) ) $exclude = array($exclude); foreach( array_keys($data) as $key ) { i
public function update($id, $table, $data, $exclude = array()){
$query = "UPDATE $table SET";
$fields = $values = array();
if( !is_array($exclude) ) $exclude = array($exclude);
foreach( array_keys($data) as $key ) {
if( !in_array($key, $exclude) ) {
$fields[] = "`$key`";
$values[] = "'" . $this->db->real_escape_string($data[$key]) . "'";
}
$fields = implode(" ", $fields);
$values = implode(" ", $values);
$query .= $fields . "=" . $values . ",";
}
$query = $query . "WHERE id = '".$id."' ";
if(!$this->db->query($query)){
echo "Something wrong with query ";
}
else{
echo "successfully updated";
}
}
调整了add函数中的代码。希望在不使用变量的情况下动态更新字段和值,即$\u POST['address']
Fatal error: [] operator not supported for strings
似乎不起作用。不确定导致错误的原因:致命错误:[]字符串不支持运算符。如何在sql查询中插入field=value?像这样使用
$query .= $fields . "=" . $values . ", ";
看看foreach循环
if( !is_array($exclude) ) $exclude = array($exclude);
foreach( array_keys($data) as $key ) {
if( !in_array($key, $exclude) ) {
$query .= $key . "='" . $data[$key] . "' ,";
}
}
$query = substr($query,0,strlen($query)-1);
$query = $query . " WHERE id = '".$id."' ";
更改这两行和循环外的下一行的名称。也许这能解决你的问题
foreach( array_keys($data) as $key ) {
if( !in_array($key, $exclude) ) {
$fields[] = "`$key`";
$values[] = "'" . $this->db->real_escape_string($data[$key]) . "'";
}
$fields = implode(" ", $fields); // Mistake done here
$values = implode(" ", $values); // Mistake done here
$query .= $fields . "=" . $values . ",";
}
遵循我的代码。其中不需要实现
内爆()
函数。我已经更改了你的功能代码。试试看
foreach( array_keys($data) as $key ) {
if( !in_array($key, $exclude) ) {
$fields[] = "`$key`";
$values[] = "'" . $this->db->real_escape_string($data[$key]) . "'";
}
}
$fields = implode(" ", $fields);
$values = implode(" ", $values);
$query .= $fields . "=" . $values . ",";
将foreach内的数组内爆,并在同一变量中更新,使其变为字符串<代码>$fields=内爆(“,$fields”)代码>,在foreach外部执行,或初始化
$fields=$values=array()代码>在foreach的开头。如果你不接受建议,为什么人们会帮助你?是的,在你发布之前我已经这么做了。但它不起作用。什么;问题出在哪里?只有该查询失败。问题可能出在这里$query=$query。“其中id=””$id.“”
,尝试在其中$query=$query之前添加一个空格。“其中id=””$id.“”你生气了还是怎么了?你放了很多???使用echo sql进行测试错误:准备失败:(1064)您的sql语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在“名称
地址
国家
”附近使用的正确语法。谢谢,但遗憾的是,除了运行查询失败之外,它没有显示任何内容。谢谢。我复制了你的substr行。非常感谢,谢谢。现在sql错误消息:准备失败:(1064)您的sql语法有错误;检查与MySQL服务器版本对应的手册,以了解在第1行“WHERE id='1''附近使用的正确语法,但我不使用prepare。哈哈。好像是queryOh中的语法问题我看到逗号卡在WHERE的末尾。那么,当字段是最后一个字段时,如何删除逗号呢?
public function update($id, $table, $data, $exclude = array()){
$query = "UPDATE $table SET";
$fields = $values = array();
if( !is_array($exclude) ) $exclude = array($exclude);
foreach( array_keys($data) as $key ) {
if( !in_array($key, $exclude) ) {
$queryArr[] = $key . "='" . $this->db->real_escape_string($data[$key]);
}
}
$query = implode(" ,", $queryArr);
$query = $query . "WHERE id = '".$id."' ";
if(!$this->db->query($query)){
echo "Something wrong with query ";
}
else{
echo "successfully updated";
}
}