1

我正在尝试从我的 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 查询不好。希望你能看到我的错误。

4

3 回答 3

3

您说“ $time - $v,有些大于 600”,但您的 if 条件反之亦然(即$v - $time

于 2013-01-18T23:48:23.257 回答
1

警告 - 您似乎对 SQL 注入持开放态度,您应该使用参数化查询。此外,您将以最低效的方式进行此操作(通过遍历每一行)。你应该做的是告诉 SQL 删除超过一定年龄的行;这些方面的东西(可能需要调整才能在您的环境/语言中工作):

$time = time() - 600;

$wpdb->query(   
     $wpdb->exec(
          "DELETE FROM wp_pagesvisites WHERE Timestamp < $time"
     )
);

...这应该为您删除所有行。


除了@mavili 提到的问题之外,您还在考虑日期/时间/时间戳错误。当您想要某个范围内的所有内容时,您正在将所有值与它们自己进行比较。最好将时间戳考虑为双精度数 - 它们不能完全相互比较,只能作为范围的一部分(>=,<等)。

于 2013-01-18T23:52:40.557 回答
0

你可以这样做 :

$bdd 你的数据库

$wpdb = $bdd->prepare("DELETE FROM wp_pagesvisites WHERE Timestamp <'$v'"); $wpdb->执行();

或者

$req = $bdd->exec("DELETE FROM wp_pagesvisites WHERE Timestamp < '$v' ");

于 2013-01-18T23:54:57.900 回答