为数据库中的行生成新的id?

时间:2013-07-16 20:18:51

标签: php ajax database

我正在使用jQuery draggable,当draggable元素移动时,我使用ajax将这些css值(左,上)保存到数据库($ wpdb)中...当有一个可拖动元素运行平滑时,我没有问题。 ..但添加到项目中我想添加多个可拖动的元素,这就是我遇到问题的地方......这里是我将数据发送到数据库的代码......

    global $wpdb;


    //The data here comes from an ajax call
    $_POST['x'];
    $_POST['y'];
    $_POST['id']; 

    $term_id = 100; 
    $name = $_POST['id']; 
    $slug = $_POST['x'];
    $term_group = $_POST['y']; 

    if(isset($_POST['id'],$_POST['y'], $_POST['x'])){
        print_r($_POST);
    }

    //Im adding into wp_terms a default table (for testing)... 
    $query = "INSERT INTO $wpdb->terms (term_id, name, slug, term_group) VALUES (%s, %s, %s, %s)"; 

    //Here I insert the ajax data into the columns 
    $wpdb->query($wpdb->prepare($query, $term_id, $name, $slug, $term_group));

    $wpdb->update("$wpdb->terms", array('slug' => $_POST['x'], 'term_group' => $_POST['y']), array('name' => $_POST['id']));


    die();

这段代码总结了:它连接到$ wpdb然后我从ajax调用中获取数据并将它们存储在变量中..我的目标是wp_terms表...所以在draggable element stop上ajax数据发送到我的脚本并存储在数据库中,update每次可拖动停止我保留该行并仅更新位于x的{​​{1}}和y值&安培;&安培; slug具有term_group name的{​​{1}}这会更新,但由于$_POST['id']是一个静态值,我无法为具有新元素的元素创建新行$term_id = 100 ..这是否有意义......它比我想象的要简单得多......我正在尝试做我已经在做的事情,但是当有一个新的$_POST['id']时我需要动态生成一个$_POST['id'],如果我手动给行一个term_id为101的话,它的工作方式正是我想要的...

表格看起来像这样......

table

我试图添加101和silly2 ..然后102 silly3 ..类似的东西,然后当最后两个值x&你改变152& 32次更改但term_id 101次停留且愚蠢2次停留...

enter image description here

这里的事情是我不想创建一个傻,silly2,silly3的新实例...我想覆盖最后两列..

2 个答案:

答案 0 :(得分:0)

尝试在sql表定义中使用auto increment。如果您无法修改表定义,则可以再添加一个表并使用它链接数据。

编辑以回答已更改的问题。
在插入新行之前,您需要检查表中是否存在值。 如果存在,则对该行执行更新SQL查询。否则插入新行。

答案 1 :(得分:0)

如果您正在运行标准的Wordpress安装,wp_terms表始终auto_increment作为term_id的默认值,因此您可以删除静态$term_id,查询现在应该是:

$query = "INSERT INTO $wpdb->terms (name, slug, term_group) VALUES (%s, %s, %s)"; 

$wpdb->query($wpdb->prepare($query, $name, $slug, $term_group));

希望这有帮助。

修改

现在你的问题与第一个完全不同。首先,您必须执行SELECT查询以查看具有name的行是否存在,例如:

$query = "SELECT FROM $wpdb->terms WHERE name=%s"; // remember to use prepare() after this

如果该行不存在,那么您可以执行上面的INSERT,如果该行存在,那么您应该执行UPDATE查询:

$query = "UPDATE $wpdb->terms SET slug=%s, term_group=%s WHERE name=%s";

还有INSERT ... ON DUPLICATE KEY UPDATE解决方案来取代上述解决方案,但我对此并不十分熟悉。