Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 更新两个MySQL数据库_Php_Mysql - Fatal编程技术网

Php 更新两个MySQL数据库

Php 更新两个MySQL数据库,php,mysql,Php,Mysql,我已经阅读了几个SO线程,可以使用内部连接更新两个数据库更新查询,但我无法使其工作,它只是抛出错误: 致命错误:C:\xampp\htdocs\update.php:79堆栈跟踪:#0 C:\xampp\htdocs\update.php(79):PDOStatement->execute(Array)#1{main}在C:\xampp\htdocs\update.php第79行抛出的完整性约束冲突:字段列表中的1052列“category”不明确 第79行:$result=$stmt->exe

我已经阅读了几个SO线程,可以使用
内部连接更新两个数据库
更新查询,但我无法使其工作,它只是抛出错误:

致命错误:C:\xampp\htdocs\update.php:79堆栈跟踪:#0 C:\xampp\htdocs\update.php(79):PDOStatement->execute(Array)#1{main}在C:\xampp\htdocs\update.php第79行抛出的完整性约束冲突:字段列表中的1052列“category”不明确

第79行:
$result=$stmt->execute($prepare)

这是数据库结构,以防需要:

  `barcode` int(6) UNSIGNED ZEROFILL NOT NULL
  `category` text NOT NULL
  `manufactuer` text NOT NULL
  `model` varchar(255) NOT NULL
  `serial` varchar(255) NOT NULL
  `itemcondition` text NOT NULL
  `locationb` text NOT NULL
  `locationr` text NOT NULL,
  `comments` varchar(255) NOT NULL
  `purchased` varchar(30) NOT NULL
  `retired` varchar(30) NOT NULL
  `stolen` varchar(30) NOT NULL
有没有更好的方法,或者我错过了一些愚蠢的事情

我还看到了在PHPMyAdmin中关联两个表列的可能性,但还没有尝试过。这两个表是相同的,其中一个表只保留对记录所做的所有更新

我对这些文章不感兴趣,其中一篇是我代码的基础


表名
与列
类别一起使用
将其显示在两个表中

if ($category){
    $sql_part[] = 'assets.category = :category';
    $prepare[':category'] = $category;
}

在我看来,“资产”和“资产历史”都有“类别”字段。 因此,请更新您的代码:(替换为确切的表名“assets”或“assets\u history”

if ($category){
        $sql_part[] = '<TABLE_NAME>.category = :category';
        $prepare[':category'] = $category;
    }
if($category){
$sql_part[]='。类别=:类别';
$prepare[':category']=$category;
}

您必须附加表名或其别名以避免类似的混淆

if ($category){
        $sql_part[] = 'a.category = :category';
        $prepare[':category'] = $category;
    }
    if($manufactuer){
        $sql_part[] = 'a.manufactuer = :manufactuer';
        $prepare[':manufactuer'] = $manufactuer;
    }
    if($model){
        $sql_part[] = 'a.model = :model';
        $prepare[':model'] = $model;
    }
    if($serial){
        $sql_part[] = 'a.serial = :serial';
        $prepare[':serial'] = $serial;
    }
    if($itemcondition){
        $sql_part[] = 'a.itemcondition = :itemcondition';
        $prepare[':itemcondition'] = $itemcondition;
    }
    if($locationb){
        $sql_part[] = 'a.locationb = :locationb';
        $prepare[':locationb'] = $locationb;
    }
    if($locationr){
        $sql_part[] = 'a.locationr = :locationr';
        $prepare[':locationr'] = $locationr;
    }
    if($comments){
        $sql_part[] = 'a.comments = :comments';
        $prepare[':comments'] = $comments;
    }
    if($purchased){
        $sql_part[] = 'a.purchased = :purchased';
        $prepare[':purchased'] = $purchased;
    }
    if($retired){
        $sql_part[] = 'a.retired = :retired';
        $prepare[':retired'] = $retired;
    }
    if($stolen){
        $sql_part[] = 'a.stolen = :stolen';
        $prepare[':stolen'] = $stolen;
    }
    $prepare[':barcode'] = $barcode;
编辑: 您也可以这样做来更新所有列

$columns = array('category','manufactuer','model','serial','itemcondition','locationb','locationr','comments','purchased','retired','stolen');
$sql_part = array();
foreach($columns as $column){
        $sql_part[] = 'a.'.$column.' = :'.$column;
        $sql_part[] = 'b.'.$column.' = :'.$column;
        $prepare[':'.$column] = '$'.$column;

}

这将为您节省几行代码

这也需要为b.etc.做吗?因为表是相同的,所以我忘了说我做了这件事,它删除了问题中所述的错误,但只更新
资产
,而不更新
资产历史
。请确认update.php中的第79行回显$sql以达到调试目的并在此处发布sql这两个表都有相同的字段。将所有sql部分更改为
资产。
解决了这个问题,但它只更新
资产
表,而不更新
资产历史
表您还应该为
资产
以及
资产
添加answe吗r是否显示最佳实践请?
如果($category){$sql\u part[]='a.category=:category';$sql\u part[]=“b.category=:category”;$prepare[':category']=$category;}
$columns = array('category','manufactuer','model','serial','itemcondition','locationb','locationr','comments','purchased','retired','stolen');
$sql_part = array();
foreach($columns as $column){
        $sql_part[] = 'a.'.$column.' = :'.$column;
        $sql_part[] = 'b.'.$column.' = :'.$column;
        $prepare[':'.$column] = '$'.$column;

}