我正在尝试从wp_pagesvisites表中删除一行。
global $wpdb;
$time = time();
$timebd = $wpdb->get_col("SELECT Timestamp FROM wp_pagesvisites");
foreach ($timebd as $v)
{
//echo ($time - $v)." - ";
if ($v - $time > 600)
{
$wpdb->query(
$wpdb->exec(
"DELETE FROM wp_pagesvisites WHERE Timestamp=$v"
)
);
}
}
它确实输入了我的if条件,因为如果我在$ time上做回声 - $ v,有些大于600,所以我认为这是我的SQL查询并不好。希望你能看到我的错误。
答案 0 :(得分:3)
你说“$time - $v
,有些大于600”,但你的if条件反之亦然(即$v - $time
)
答案 1 :(得分:1)
警告 - 您似乎对SQL注入开放,您应该使用参数化查询。此外,您将以最低效的方式(通过循环遍历每一行)来实现此目的。你应该做的是告诉SQL删除特定年龄的行;这些内容(可能需要调整以适应您的环境/语言):
$time = time() - 600;
$wpdb->query(
$wpdb->exec(
"DELETE FROM wp_pagesvisites WHERE Timestamp < $time"
)
);
...这应该为你删除所有行。
除了@mavili提到的问题之外,你还在考虑错误的日期/时间/时间戳。当您想要在一定范围内的所有内容时,您将所有值与自己进行比较。几乎最好将时间戳视为双打 - 它们不能完全相互比较,只能作为范围的一部分(>=
,<
等)。
答案 2 :(得分:0)
你可以这样做:
$ bdd your database
$ wpdb = $ bdd-&gt; prepare(“DELETE FROM wp_pagesvisites WHERE Timestamp&lt;'$ v'”); $ wpdb-&GT;执行();
或
$ req = $ bdd-&gt; exec(“DELETE FROM wp_pagesvisites WHERE Timestamp&lt;'$ v'”);