Php 更新两个MySQL数据库
我已经阅读了几个SO线程,可以使用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
内部连接更新两个数据库
更新查询,但我无法使其工作,它只是抛出错误:
致命错误: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;
}