我有一个 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
<?php
function 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
<?php
function 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;
}
}
或者有更好的方法来做到这一点吗?
幕布斯7119047