[英]Any reason why this stopped working? PHP / mysql
所以这以前是使用替换来工作的,但是替换空字段是否会在更新时不存在?
自从移动到更新后,即使声明中清楚地显示了 $id,它也不会被读取。
function updateData($table,$id,$data){
$extra = '';
foreach ( $data as $key=>$row )
{
$set[]= $key."='".$row."'";
}
$set = implode(',',$set);
if($id){
$extra = "WHERE `id`='$id'";
}
$statement = "UPDATE `$table` SET ".$set." ". $extra;
print_r($statement);
$this->printDebug('Update Table Data',$statement);
if($stmt = $this->conn->prepare($statement)){
$stmt->execute() or trigger_error($stmt->error, E_USER_ERROR);
$last_id = $stmt->insert_id;
$response = array("message"=>"success","last_id"=>$last_id);
return ($response);
} else {
// die($this->conn->error);
trigger_error($this->conn->error,E_USER_ERROR);
}
}
UPDATE `categories` SET category_status='1',featured='1',category_name='Health & Beauty',parent_id='0',price_low='',price_high='',category_description='',id='1',tags='null',date_added='2022-06-18 22:11:31',last_modified='2022-06-18 22:11:31',meta_type='category',meta_id='0',images='{"path":[""]}'
$insertData = $b->updateData('products',$_POST['id'],$_POST);
看起来您的 php 函数从两个不同的地方获取表的id
列的值。
$id
参数。$data
数组参数的$data['id']
元素。 而且,从您向我们展示的 SQL 行来看,您的函数是在$id
参数设置为零的情况下调用的:您的 SQL 没有 WHERE 子句。 您可能知道,没有 WHERE 子句的 UPDATE 会尝试更新表中的所有行! .
在您的情况下,UPDATE 失败是因为您在 SQL 中有SET ... id=1 ...
id
列是您的主键,因此不允许重复值。 (您不能将表中每一行的id
设置为1
。)因此您的 SQL 语句失败。
你很幸运。 您的表的数据可能已被删除。 小心 UPDATE 和 DELETE 语句中的 WHERE 子句,嗯? 如果你弄错了,你就会丢弃你的数据。
要使其正常工作,请确保您的函数调用者为您提供正确的$id
值。 或者,从函数签名中完全删除该参数,并从$data
数组中获取$id
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.