Php 从本周中选择*

Php 从本周中选择*,php,mysql,Php,Mysql,我有一个包含数据的表和一个名为“week”的列。每次用户向数据库发布内容时,都会将其添加到“周”列中: $week = Date('W'); 因此,本周插入的所有内容在“周”列中都有数字“13”。现在我想要一个查询,选择本周的所有内容并在我的网站上发布,因此我编写了一个类似于上面的变量,并写道: $sql = 'SELECT * FROM my_table WHERE week = $week'; 但它重复了一个错误:where子句中的未知列“$week”。 如果我写SELECT*,从我的_

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

$week = Date('W');
因此,本周插入的所有内容在“周”列中都有数字“13”。现在我想要一个查询,选择本周的所有内容并在我的网站上发布,因此我编写了一个类似于上面的变量,并写道:

$sql = 'SELECT * FROM my_table WHERE week = $week';
但它重复了一个错误:
where子句中的未知列“$week”。


如果我写
SELECT*,从我的_表中选择week=13,它工作得很好但我希望它自动选择当前周数。

注意SQL注入和 改变这个

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


必须对字符串使用双引号:

$sql = "SELECT * FROM my_table WHERE week = $week";
否则,将不替换$week

您应该使用准备好的语句来防止SQL注入。

为什么不干脆这样做呢

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

请注意:
SELECT*
既不好也不好。仅选择您需要的内容。

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

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

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

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

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

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

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

了解prepared Statement可能重复的您忘记了“for week”$week'@Gert看起来
week
列是一个整数,所以引号不是整数necessary@Gert:不。看起来week是int类型而不是character类型。它如何防止这种情况呢?它不会防止SQL注入,但是如果你不想使用预先准备好的语句,那就是方法!谢谢!:)我来看看准备好的声明!不用担心。是的,这是一种更为简单的方法
SELECT * FROM my_table WHERE date > DATE_SUB(NOW(), INTERVAL 1 WEEK);