繁体   English   中英

这停止工作的任何原因? php/mysql

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM