Php 如何修复此过滤器功能,直到其正常工作?

Php 如何修复此过滤器功能,直到其正常工作?,php,if-statement,search,logic,conditional-statements,Php,If Statement,Search,Logic,Conditional Statements,苏。。我想在我的网站上做一个过滤功能,他使用3个表tb_data、tb_peserta和paket在yhis页面上打印出表组件 $keyword = $_POST['keyword']; $query = " SELECT tb_peserta.id_peserta, tb_data.nama, tb_paket.nama_paket, ket, waktu_awal, waktu_akhi

苏。。我想在我的网站上做一个过滤功能,他使用3个表tb_data、tb_peserta和paket在yhis页面上打印出表组件

$keyword = $_POST['keyword'];
$query = "
    SELECT 
        tb_peserta.id_peserta,
        tb_data.nama,
        tb_paket.nama_paket,
        ket,
        waktu_awal,
        waktu_akhir
    FROM 
        tb_peserta,tb_data,tb_paket 
    WHERE  
        tb_peserta.id_number=tb_data.id_number 
        AND tb_peserta.id_paket=tb_paket.id_paket 
        AND status_data_peserta='aktif' 
        AND nama LIKE '%$keyword%' 
        OR nama_paket LIKE '%$keyword%' 
        OR ket LIKE '%$keyword'
";

这就是我所做的筛选查询。。这不是显示一个数据,而是显示所有数据,它不起作用。。因此,我需要您的帮助

很可能您在此处创建了笛卡尔连接。我建议使用ansi风格的sql,因为它更清晰,不易受到意外连接结果的影响:

SELECT 
    tb_peserta.id_peserta,tb_data.nama,tb_paket.nama_paket,ket,waktu_awal,waktu_akhir
FROM 
    tb_peserta
    INNER JOIN tb_data on tb_peserta.id_number=tb_data.id_number
    INNER JOIN tb_paket on tb_peserta.id_paket = tb_paket.id_paket
WHERE 
    status_data_peserta='aktif'
    — note parentheses and placeholders!
    AND (
        nama LIKE ?
        OR
        nama_paket LIKE ?
        OR
        ket LIKE ?
    )
需要注意的两件重要事情:

  • 当您同时使用
    以及
    时,如果不使用括号澄清操作顺序,可能会得到意外的结果
  • 永远不要使用串联在查询中放入变量。始终使用事先准备好的语句。(您看到的
    )。有关如何使用,请参阅本网站以供参考

  • 你能展示一些表格的样本数据吗?