【问题标题】:find and replace in an VARCHAR using php使用 php 在 VARCHAR 中查找和替换
【发布时间】:2016-03-13 19:27:18
【问题描述】:

$participants 是 MYSQL 中的 VARCHAR,看起来像这样 q1qq2qq3qq4qq5qq6q。我想要的是有一个 if 语句 如果找到q$_SESSION["UserID"]q 则执行,也就是说,我希望它找到$participants 中的一些输入,例如q2q。 我不知道怎么写这个。 $_SESSION["UserID"] 是 MYSQL 数据库中的 id 列之一,因此等于 2 之类的数字。

我在php中尝试了以下

if(strpos($participants, q$_SESSION["UserID"]q)){
    echo "succeeded";
};

但它不起作用。此外,我还希望能够带走q$_SESSION["UserID"]q,以防万一。我试过了

$participants = preg_replace("q{$_SESSION["UserID"]}q", "", $participants);

但它不起作用。想法?

【问题讨论】:

  • if(strpos($participants, "q".$_SESSION["UserID"]."q")) echo "succeeded"
  • 您在检查错误吗? qs 应该扔东西。您的正则表达式不起作用,因为 q 将充当分隔符而不是实际字符,但字母字符不是有效的分隔符
  • 那是一种可怕的数据存储方式。 重构你原来的概念
  • 你有另一种想法 RIggsFolly?如果是,请告诉我:)
  • 1) serialize() 2) json_encode()

标签: php mysql session mysqli


【解决方案1】:

您可以执行以下操作:

if(strpos($participants, "q" . $_SESSION["UserID"] . "q") !== FALSE){
    echo "succeeded";
};

或者您可以在 MySQL 中使用 LIKE 语句,例如

SELECT * FROM table WHERE participants LIKE "%q2q%";

但是,正如 RiggsFolly 所说,这是一种可怕的数据存储方式。创建一个包含主键、主表外键和参与者 ID 的参与者表。

例如

participantinstanceid int primary key
instanceid int foreign key -> Your instance table
participantid int foreign key -> participant table

通过这种方式,您只需根据 instanceid 查询表即可获取所有参与者。如果您在这方面需要进一步的帮助,我很乐意为您提供更好的数据库结构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多