该场景是,我在PHP中具有搜索功能,尽管问题是它只能搜索一个表。我想要的是能够同时在两个表中搜索。
这是我的初始代码,record.php,此搜索功能只能搜索一个表。
<?php
class Record{
private $conn;
private $table_name_1 = "name_of_table_1";
private $table_name_2 = "name_of_table_2";
//value to be searched in table 1
public $name;
//value to searched in table 2
public $age;
public function __construct($db){
$this->conn = $db;
}
//search function
public function search($search_term, $from_record_num, $records_per_page){
$query = "SELECT name FROM " . $this->table_name_2 . " WHERE name LIKE ? OR ORDER BY name ASC LIMIT ?, ?";
$stmt = $this->conn->prepare($query);
$search_term = "%{$search_term}%";
$stmt->bindParam(1, $search_term);
$stmt->bindParam(11, $from_record_num, PDO::PARAM_INT);
$stmt->bindParam(12, $records_per_page, PDO::PARAM_INT);
$stmt->execute();
return $stmt;
}
public function countAll_BySearch($search_term){
$query = "SELECT COUNT(*) as total_rows FROM " . $this->table_name_2 . " WHERE name LIKE ? OR";
$stmt = $this->conn->prepare($query);
$search_term = "%{$search_term}%";
$stmt->execute(array($search_term, $search_term, $search_term, $search_term, $search_term, $search_term, $search_term, $search_term, $search_term, $search_term));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
return $row['total_rows'];
}
function readAll($from_record_num, $records_per_page){
$query = "SELECT name FROM " . $this->table_name_2 . " ORDER BY name ASC LIMIT {$from_record_num}, {$records_per_page}";
$stmt = $this->conn->prepare( $query );
$stmt->execute();
return $stmt;
}
}
?>
这是与搜索功能search.php相关的另一代码。
<?php
include_once 'database.php';
include_once 'record.php';
$database = new Database();
$db = $database->getConnection();
$record = new Record($db);
$search_term=isset($_GET['s']) ? htmlspecialchars($_GET['s'], ENT_QUOTES) : '';
$page_title = "You searched for \"{$search_term}\"";
$stmt = $record->search($search_term, $from_record_num, $records_per_page);
$page_url="search.php?s={$search_term}&";
$total_rows=$record->countAll_BySearch($search_term);
//for viewing
include_once "read.php";
?>
以及另一个用于显示的代码,read.php。
<?php
include_once 'record.php';
if($total_rows>0){
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
extract($row);
echo $name;
}
} else {
echo "no record";
}
?>
您可以使用全部并集
这样,您将获得具有表特定计数的几行
"SELECT COUNT(*) as total_rows
FROM " . $this->table_name_2 . "
WHERE name LIKE ?
union all
SELECT COUNT(*)
FROM " . $this->table_name_3 . "
WHERE name LIKE ?
...
union all
SELECT COUNT(*)
FROM " . $this->table_name_n . "
WHERE name LIKE ?
";
这样,您将获得所有表的总数
" select sum(total_rows)
from (
SELECT COUNT(*) as total_rows
FROM " . $this->table_name_2 . "
WHERE name LIKE ?
union all
SELECT COUNT(*)
FROM " . $this->table_name_3 . "
WHERE name LIKE ?
...
union all
SELECT COUNT(*)
FROM " . $this->table_name_n . "
WHERE name LIKE ?
) t
";
无论如何都要小心在sql代码中使用php var ..您有进行sql注入的风险。因此请在使用前对var内容进行适当的清理