Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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_Arrays - Fatal编程技术网

PHP/MySQL-如果变量不存在,则更新数组

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) {

我有一个从数据库中获取的具有不同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) {
    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这样的三流网站。官方文档几乎总是好得多,包括社区评论,可以更好地改进它。这是我的建议。