从数据库中删除和插入

时间:2012-02-20 08:25:03

标签: php mysql

我有点困惑,为什么它不起作用。

我想要的是控制数据库如果对于ex 2012-02-21存在于DB中删除它并再次插入但是它不起作用

我的完整代码是,但是语句不起作用:S

 $ga->requestAccountData();
$mysql = new mysql();
$mysql->connect();



    // $startDate = date("Y-m-d");
    $startDate = "2012-02-21";

     $dbResult = mysql_query("select * from profiles where profile_Date='".$startDate."'");
     $query =  mysql_num_rows($dbResult);
     if($query > 0)
     {

         mysql_query("delete from profiles where profile_Date='".$startDate."'");
         foreach ($ga->getResults() as $result) {


        $ga->requestReportData($result->getProfileId(),array('eventCategory','eventAction'),array('totalEvents'),$sort_metric=null,$filter='eventAction==InitPlayer',$start_date=$startDate,$end_date=$startDate);
        foreach($ga->getResults() as $result2)
        {
            echo $result;
            echo $result2->geteventCategory()."<br />";
            echo $result2->geteventAction();
            echo $result2->gettotalEvents();
            "<br />";
            "<br />";
            "<br />";

              $mysql->query("insert into profiles values(" . $result->getProfileId() . ",'" . $result . "','".$result2->geteventCategory()."','".$result2->geteventAction()."','".$result2->gettotalEvents()."','".$startDate."')");

         }
        }
     }
     else
     {
         foreach ($ga->getResults() as $result) {


        $ga->requestReportData($result->getProfileId(),array('eventCategory','eventAction'),array('totalEvents'),$sort_metric=null,$filter='eventAction==InitPlayer',$start_date=$startDate,$end_date=$startDate);
        foreach($ga->getResults() as $result2)
        {
            echo $result;
            echo $result2->geteventCategory()."<br />";
            echo $result2->geteventAction();
            echo $result2->gettotalEvents();
            "<br />";
            "<br />";
            "<br />";

              $mysql->query("insert into profiles values(" . $result->getProfileId() . ",'" . $result . "','".$result2->geteventCategory()."','".$result2->geteventAction()."','".$result2->gettotalEvents()."','".$startDate."')");

         }
        }
     }

3 个答案:

答案 0 :(得分:4)

您应该使用mysql_num_rows来计算所选结果,而不是mysql_affected_rows,这适用于更改数据的查询(插入,更新,删除等)

$result = mysql_query("select * from profiles where profile_Date='".$startDate."'");
$count =  mysql_num_rows($result);
if($count > 0) { 
   ... 
}

http://php.net/manual/en/function.mysql-num-rows.php

答案 1 :(得分:1)

为什么需要先删除然后插入?您也可以使用更新查询。此外,profile_Date字段的数据类型是什么?是设定日期还是日期和时间?

答案 2 :(得分:1)

您可以使用MySQL的REPLACE功能(docs)。 它基本上与INSERT类似,但例外情况是,如果数据库中已存在具有相同键的值,则首先将删除现有值,然后将新值作为完全新条目插入。如果没有现有值,则其行为类似于INSERT

注意与UPDATE

的差异

UPDATE的差异隐藏在细节中:

  • 由于实际将删除现有值,因此也将删除所有引用的外键约束。
  • UPDATE只会更新提供的值,INSERT其他列将获得默认值(实际示例:字段名称timestamp_created,默认值为{{1} }将在CURRENT_TIMESTAMP语句中保持不变,但会在UPDATE语句中显示当前时间)