为了账号安全,请及时绑定邮箱和手机立即绑定

在 PHP 中使用 PDO 从多个表中搜索的更好方法是什么?

在 PHP 中使用 PDO 从多个表中搜索的更好方法是什么?

PHP
繁星coding 2023-07-08 20:14:48
我有一个 HTML 表单,其中有一个用于输入产品名称的搜索字段,下面是复选框,每个复选框对应一个要搜索产品名称的商店。用户可以通过选中复选框从多个商店进行搜索。该表单向服务器发送 GET 请求,其中有一个数据库,其中包含针对不同商店的单独表。<form action="price.php" method="get">    <input type="text" id="query" name="query" value="">    <input type="checkbox" name="shop1" id="shop1">    <input type="checkbox" name="shop2" id="shop2">    <input type="submit" name="submit" value="submit"></form>因此,在服务器端,我编写了一段 PHP 代码,它将从与用户检查的商店相对应的表中搜索产品名称。由于我将来会添加越来越多的商店,以下哪些 PHP 代码更适合?版本1<?phpfunction search($pdo, $shop) {if ( isset($_GET[$shop]) && ($_GET['query'] !== "") ) {    switch ($shop) {        case "shop1":            $stmt = $pdo->prepare("SELECT * FROM `shop1` WHERE `name` LIKE :query");            $stmt->execute(array(":query" => "%". $_GET['query'] . "%"));            break;        case "shop2":            $stmt = $pdo->prepare("SELECT * FROM `shop2` WHERE `name` LIKE :query");            $stmt->execute(array(":query" => "%". $_GET['query'] . "%"));            break;        ...        ...        ...    }    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);    if ( count($rows) === 0 ) {        $_SESSION[$shop] = 'nothing found from '. $shop;        return array();    } else {        return $rows;    }    } else {        return array();    }}if ( ! isset($_GET['query']) ) {    $_SESSION['success'] = "search for an item";} else {    $rowsShop1 = search($pdo, "shop1");    $rowsShop2 = search($pdo, "shop2");    ...    ...    ...}?>版本2<?phpfunction search1($pdo, $shop, $sql) {    $stmt = $pdo->prepare($sql);    $stmt->execute(array(":query" => "%". $_GET['query'] . "%"));    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);    if ( count($rows) === 0 ) {        $_SESSION[$shop] = 'nothing found from '. $shop;        return array();    } else {        return $rows;    }}或者有更好的方法来做到这一点吗?
查看完整描述

1 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

如果小提琴不知何故不再工作,下面是 SQL 代码。(假设MySQL/MariaDB)

create table product

(

    id int auto_increment,

    name varchar(255) not null,

    constraint product_pk

        primary key (id)

);


create table shop

(

    id int auto_increment,

    name varchar(255) not null,

    constraint shop_pk

        primary key (id)

);


create table product_shop

(

  id int auto_increment,

  product_id int,

  shop_id int,

  quantity int not null default 0,

  constraint product_shop_pk

      primary key (id)

);


alter table product_shop

    add constraint product_shop_product_fk

        foreign key (product_id) references product (id);

alter table product_shop

    add constraint product_shop_shop_fk

        foreign key (shop_id) references shop (id);


查看完整回答
反对 回复 2023-07-08
  • 1 回答
  • 0 关注
  • 93 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信