在一个查询API和PHP中插入或更新
问题描述:
我有一个产品可以编辑并添加一种语言。在我目前的api中,如果已经有一种语言,它可以被显示并且可以被更新,但是我的问题是如果没有其他细节,例如,当我编辑它时输入一个新的语言,数据不会保存在数据库。在一个查询API和PHP中插入或更新
if(!empty($body['addtl'])){
$ProdArray = "";
foreach($body['addtl'] as $value){
foreach($value as $key => $innerValue){
if($key!="id")
if(!empty($innerValue))
$ProdArray .= $key."='".$innerValue."', ";
}
$ProdArray = trim($ProdArray, ", ");
$ProdArray .= " WHERE id=".$value['id'];
$sql_query = "UPDATE ProductAddtlDetails SET ".$ProdArray;
$stmt = $dbRemote->prepare($sql_query);
$stmt->execute();
$ProdArray = "";
}
$editFlag = 1;
}
我该如何解决我的问题?
答
首先,我们可以使错误模式,使您可以在连接后把这个:
$dbRemote->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
那么你的代码改成这样:
if(!empty($body['addtl'])){
$ProdArray = "";
foreach($body['addtl'] as $value){
foreach($value as $key => $innerValue){
if($key!="id" && !empty($innerValue)) {
$ProdArray .= $key."=". $innerValue. ", ";
}
}
$ProdArray = rtrim($ProdArray, ", ");
$ProdArray .= " WHERE id=".$value['id'];
$sql_query = "UPDATE ProductAddtlDetails SET ".$ProdArray;
$stmt = $dbRemote->prepare($sql_query);
$stmt->execute();
$ProdArray = "";
}
$editFlag = 1;
}
+0
仍然没有保存数据 – bleykFaust
+0
@bleykFaust你有导入你的连接 –
** WARNING **:这有一些严重的[SQL注入漏洞](http://bobby-tables.com/),因为在查询中使用了“$ _GET”数据。尽可能使用**准备好的陈述**。这些在['mysqli'](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和[PDO](http://php.net/manual/)中很简单en/pdo.prepared-statements.php)其中任何用户提供的数据都是用'?'或':name'指示符指定的,后者使用'bind_param'或'execute'填充,具体取决于您使用的是哪一个。 **绝不**将'$ _POST'或'$ _GET'数据直接放入您的查询中。 – tadman
我在这里看不到任何错误。查询是否有效?它炸毁了吗?你需要找出答案。最简单的方法是使用任何驱动程序启用异常。 – tadman