【问题标题】:how can i fix this filter function till it works?我怎样才能修复这个过滤器功能直到它工作?
【发布时间】:2019-09-02 01:14:03
【问题描述】:

soo.. 我想在我的网站上制作过滤功能,他使用 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'
";

这是我做的过滤查询..这不显示数据但它显示所有数据,它不起作用..所以需要你的帮助

【问题讨论】:

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

标签: php if-statement search logic conditional-statements


【解决方案1】:

您很可能在这里创建了笛卡尔连接。我会推荐使用 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 ?
    )

需要注意的两个重要事项:

  1. andor一起使用,如果不用括号明确操作顺序,可能会得到意想不到的结果
  2. 永远不要使用串联在查询中放置变量。始终使用准备好的语句。 (你看到的?)。有关如何使用PDO的信息,请参阅本网站

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多