如何删除php-mysql中逗号分隔的值


how to delete a comma separated value in php mysql

我的数据库表中有一个名为image的字段,我将图像存储在这个字段中,如(1.jpg、2.jpg、3.jpg、4.jpg)。因此,我必须删除表列中的第二个图像,即2.jpg。

注意:

  • 这不是在表的列字段中存储文件名或类似数据的正确方法
  • 你应该修改你的帖子,并包含你正在处理的代码

您应该将其存储在image列中,如下所示:

| image |
| 1.jpg |
| 2.jpg |
| 3.jpg |
| 4.jpg |

不是这样的:

| image                   |
| 1.jpg,2.jpg,3.jpg,4.jpg |

答案:

但是,如果您对此感到困惑,并且真的只想从给定的字符串中删除2.jpg,那么您可以使用PHP的explode()函数。请在此处查看。(请不要被这个代码吓倒。我只是在里面放了一些注释来解释每行的功能):

使用此代码所要做的就是替换正确的table名称、column名称和variable(如有必要)。

if(isset($_REQUEST['id'])){
  $userDelete = $_REQUEST['val'];
  $newString = "";
  $rs = mysqli_query($YourDBConnection,"SELECT id, data FROM arr");
    while($row = mysqli_fetch_array($rs)){
      $id = $row["id"];
      $data = $row["data"];
      $exploded = explode(",",$data);
      $counter = count($exploded);
        for($x = 0; $x<$counter; $x++){ /* THIS LOOP WILL REMOVE THE REQUESTED DATA TO REMOVE */
          if($userDelete != $exploded[$x]){
            $newString = $newString.",".$exploded[$x];
          } /* END OF IF THE REQUESTED TO DELETE IS NOT THE SAME WITH EXPLODED DATA */
        } /* END OF FOR LOOP */
    mysqli_query($YourDBConnection,"UPDATE arr SET data = '$newString' WHERE id='$id'");
    } /* END OF WHILE LOOP */
} /* END OF ISSET REQUEST ID */

建议:

如果您正确地将其插入到列字段中,则可以使用DELETE query从数据库中删除2.jpg

DELETE FROM yourTableName WHERE image = '2.jpg'

但它将从数据库中永久删除数据。我建议添加另一个列,说明该图片的操作,如果它将被隐藏或显示在前端。

例如,我们有一个名为action的列,它的值只有101触发显示图像,0触发隐藏图像。

您需要从数据库表中选择image列,然后需要编写以下脚本:

$oldimages = '1.jpg,2.jpg,3.jpg,4.jpg';
$replaceImage = '2.jpg';
$newImages = str_replace($replaceImage.",", "", $oldimages);
// then write update query.
mysqli_query($conn,"UPDATE images SET images = '$newImages' WHERE id=$pid");