从本周选择*

时间:2017-03-29 09:33:49

标签: php mysql

我有一个包含数据的表和一个名为'周'的列。每当用户向数据库发布内容时,都会将其添加到“周”列中:

$week = Date('W');

所以在本周插入的所有内容都有数字' 13'在周列。现在我想要一个查询,从本周选择所有内容并在我的网站上发布,所以我写了一个像上面那样的变量并写道:

$sql = 'SELECT * FROM my_table WHERE week = $week';

但它回复了一个错误:Unknown column '$week' in 'where clause'.

如果我写SELECT * FROM my_table WHERE week = 13;,它可以正常工作,但我希望它能自动选择当前周数。

5 个答案:

答案 0 :(得分:4)

为什么不简单地做

 $sql = "SELECT * FROM my_table WHERE week = WEEK(NOW())";

只需注意:SELECT *不是很好,也是非常糟糕的做法。只选择你需要的东西。

答案 1 :(得分:1)

你必须使用双引号作为字符串:

$sql = "SELECT * FROM my_table WHERE week = $week";

如果没有,$周不会被替换。

您应该使用预准备语句来阻止SQL注入。

答案 2 :(得分:0)

注意SQL注入和 改变这个

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class Test {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Test");

        Container cont = frame.getContentPane();
        cont.setLayout(new BorderLayout());

        DefaultTableModel dtm = new DefaultTableModel(new Object[]{"Column 1","Column 2"}, 0);
        JTable table = new JTable(dtm);

        JScrollPane scroll = new JScrollPane(table);
        cont.add(scroll, BorderLayout.CENTER);

        dtm.addRow(new Object[]{"Value 1", "Value 2"});

        JButton add = new JButton("Add");
        cont.add(add, BorderLayout.NORTH);

        add.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                dtm.addRow(new Object[]{"Another value", "Another value"});
            }
        });

        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

$sql = 'SELECT * FROM my_table WHERE week = $week';

答案 3 :(得分:0)

请使用它,它比SQL注入更安全:

$week = $mysqli->escape_string($week);

$sql = "SELECT * FROM my_table WHERE week = '" . $week . "'";

$retval = $mysqli->query($sql);

您需要将mysqli对象设置为与数据库的连接才能使其正常工作。之后,您可以从$ retval中获取行。

答案 4 :(得分:0)

假设您的日期列是实际的MySQL日期列:

SELECT * FROM my_table WHERE date > DATE_SUB(NOW(), INTERVAL 1 WEEK);