PHP/MySQL-如果变量不存在,则更新数组
我有一个从数据库中获取的具有不同ID的数组PHP/MySQL-如果变量不存在,则更新数组,php,mysql,arrays,Php,Mysql,Arrays,我有一个从数据库中获取的具有不同ID的数组 $fotos_temp_list=explode(",",$fotos_temp["fa_id"][0]); Result: fa_id => 15,16,17,18 现在我想用ID15,16,17,18更新另一个表中的所有行,并将一个特定的'$id'插入一个名为'fa_ev_id'的列中。 在本例中,我设置: $id=1; 现在,我的foreach循环如下所示: foreach ($fotos_temp_list as $key) {
$fotos_temp_list=explode(",",$fotos_temp["fa_id"][0]);
Result: fa_id => 15,16,17,18
现在我想用ID15,16,17,18更新另一个表中的所有行,并将一个特定的'$id'
插入一个名为'fa_ev_id'
的列中。
在本例中,我设置:
$id=1;
现在,我的foreach循环如下所示:
foreach ($fotos_temp_list as $key) {
UPDATE images SET fa_ev_id = Concat(fa_ev_id , ',' ,'".$id."') where fa_id='".$key."' ";
}
这部分也起作用了。
带有我的ID的每一行(在我的示例中:15,16,17,18)都会得到更新
问题:
当我再次运行foreach循环时,“$id”
将再次保存在行中。请看这里:
问题:
我怎么可能检查'$id'
是否已在行中,如果已在行中,则跳过它?以下是我试图做的:
foreach ($fotos_temp_list as $key) {
if (!in_array($id,$key)===true) {
UPDATE fotoalbum SET fa_ev_id = Concat(fa_ev_id , ',' ,'".$id."') where fa_id='".$key."'
}
}
我认为in_array
函数检查'$id'
id是否已经在'$key'
中,如果是真的,UPDATE语句就完成了。因此,我添加了!在数组“
中,但它似乎不起作用。有人知道我做错了什么吗?我只想检查'$id'
是否已在我的数据库行中,如果已在,则不应再次插入'$id'
。
非常感谢您的建议。php中的in_array()函数接受数组作为其第二个参数,in(!in_array($id,$key)==true)。这里传入的第二个参数$key不是数组
您可以将fa_ev_id的数据类型保存为json,并在执行字段更新时检索并解码该值,以了解使用in_array()中的$id是否已经存在,或者您可以检索这些值,将它们展开以形成一个数组,然后在数组()中使用检查它是否存在。字段“fa\u ev\u id”的类型是什么?看起来更像是数据库结构不良的问题。请向我解释一下,为什么要将ID保存在逗号分隔的字符串中而不是典型的字符串中?运行此操作时,
$fotos\u temp\u list
中有什么内容?你到底为什么要在一个字段中存储多个值?一个正确设计的关系数据库不能做到这一点。每个字段应该有一个值。如果没有,则表明模式设计中存在缺陷。您是否研究过关系数据库设计和规范化?警告:尽可能使用准备好的语句,以避免在查询和创建过程中注入任意数据。在任何用户提供的数据都指定有?
或:name
指示符的情况下,这些操作都非常简单,稍后将使用bind_param
或execute
填充指示符,具体取决于您使用的是哪一个指示符。谢谢。我将您的答案添加为正确答案,因为我忽略了$key不能是数组。我根据json获取数据,并在ID已经存在的情况下使用in_array()进行检查。现在可以了。谢谢。请尽量避免链接到像w3schools这样的三流网站。官方文档几乎总是好得多,包括社区评论,可以更好地改进它。这是我的建议。