检查php数组的foreach循环中是否存在mysql行

时间:2014-10-04 17:19:58

标签: php mysql foreach

我有一个项目数组,我正在循环并检查数据库中是否已存在该值,如果确实存在,我想更新它,如果不是,我想创建一个新条目。看到数组中的第一项并返回true,但是第一项后面的任何内容都返回0,即使我知道它在数据库中的正确item_name和ticket_id这一事实。

我在询问之前尝试过研究,但此时我很难过。感谢您提前提供任何帮助。

if($func == 'edit') {

        foreach ($addItem as $key => $value) {
            if (empty($key) || $key=='amount_paid') {
    continue;
  }
            $ticket_items = mysql_query("SELECT * FROM ticket_items WHERE ticket_id = '$ticket_id' AND item_name = '$key'");
            if (mysql_num_rows($ticket_items)) {
                print 'Updated '. $key ."\n";
                mysql_query("UPDATE ticket_items set item_name='$key', item_price='$value' WHERE ticket_id='$ticket_id'");
            } else {
                print 'Created '. $key ."\n";
            mysql_query("INSERT into ticket_items (ticket_id, item_name, item_price) VALUES ('$ticket_id', '$key', '$value')");     
            }
        }
}

2 个答案:

答案 0 :(得分:1)

在第一次更新时,您正在重置数据库中所有故障单的数据。

  

mysql_query(“UPDATE ticket_items set item_name ='$ key',item_price ='$ value'WHERE ticket_id ='$ ticket_id'”);

上面的一个将键和值设置为该票证的所有行的相同值。

你应该尝试下面的smt:

  

mysql_query(“UPDATE ticket_items set item_price ='$ value'WHERE ticket_id ='$ ticket_id'和item_name ='$ key'”);

答案 1 :(得分:1)

请注意,在UPDATE语句中,无论item_name如何,您都要更新具有相同$ ticket_id的每一行。它应该是:

UPDATE ticket_items set item_name='$key', item_price='$value' WHERE ticket_id='$ticket_id' AND item_name='$key';