SQL查询没有做任何事情

时间:2013-01-18 23:43:09

标签: sql exec

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

3 个答案:

答案 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'”);