选择数据库中的项目然后更新?

时间:2013-07-12 08:05:22

标签: php database wordpress wpdb

编辑:让我重新解释一下这个问题,如何编写数据库查询来说出这样的话...... PUT $_POST['y'] WHERE column is 'slug' and term_id = 100显然不是正确的sql语法..但我认为这样的事情会满足我的需要吗?权利..

我试图更新数据库中的项目,使用动态变量的值(意味着变量经常更改)每次更改我不想添加新行(这是做什么)而不是我想要保留一行并更新一个部分......

    global $wpdb;

一些变量,这些东西进入我的数据表

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

    $term_id = 100; 
    $name = 'Code Snippet'; 
    $slug = 'code-snippet'; 

设置列的变量我将数据插入...

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

我使用$query变量并使用上面声明的变量填充表格

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

我可以使用动态值$ _POST ['y']更新我们声明为'code-snippet'的slug列,但只能更新一次...如何继续更新?

//Here is where I struggle.. 
$wpdb->update("$wpdb->terms", array('slug' => $_POST['y']), array('slug' => 'code-snippet'));

    die();

在案例中更新添加的AJAX代码... (它运行正常..我只关注在进行新的ajax调用时更新行...我可以创建一个新行调用ajax ..只是不知道如何查询它以便它替换旧的ajax值)

     $( ".silly-string" ).draggable({
    containment: '#_moon_static_bg_status',

     stop: function(event, ui) {
         var pos_x = ui.position.left;
         var pos_y = ui.position.top;

         jQuery.ajax({
            type: "POST",
            url: window.ajaxurl,
            data: { "action": "myAjax", x: pos_x, y: pos_y }}).done(function( msg ) {
             $('.silly-string').text( "Data Saved: " + msg );
         });    
      }  
});

更新

http://i.stack.imgur.com/agL0U.jpg

您可以从图片中看到648曾经是'code-snippet',但当数字更改为723时,它不会更新..显然是因为我们告诉它更新'code-snippet'我试图找出如何编写它以使其符合我的需要..

更新:我希望这能说明我想要实现的目标的简单性

http://i.stack.imgur.com/pxeo1.jpg

已解决:感谢@Matt Cooper我能够意识到这是多么容易,现在我可以实际做我想做的事。我在将来可以使用的过程中学到了一些东西,我现在拥有更多的编码能力,知道如何与wordpress数据库进行交互,这是教程中的地狱阅读教程,但这就是你学习的方法...... / p>

解决方案:我添加了一个新的ajax变量,它返回可拖动元素的ID .. var divid = ui.helper.attr("id");(必须确保给元素一个ID)这是完整的代码..

AJAX:我添加了一个新变量var divid = ui.helper.attr("id");并将其添加到要传递的数据中

    $( ".silly-string" ).draggable({
    containment: '#_moon_static_bg_status',

     stop: function(event, ui) {
         var pos_x = ui.position.left;
         var pos_y = ui.position.top;
         var divid = ui.helper.attr("id");

         jQuery.ajax({
            type: "POST",
            url: window.ajaxurl,
            data: { "action": "myAjax", id: divid, x: pos_x, y: pos_y }})   
      }  
});

PHP:

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

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

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

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

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

    $last_title = $wpdb->get_col("SELECT term_id FROM $wpdb->terms WHERE name = 'Code Snippet' ");  
    echo $last_title[3];

    die();

2 个答案:

答案 0 :(得分:0)

看起来你的更新命令并非万无一失,让我们来看看代码。

$wpdb->update("$wpdb->terms", array('slug' => $_POST['y']), array('slug' => 'code-snippet'));

这将发送一个SQL命令,说明“更新slug code-snippet的记录并将其更改为$_POST['y']

所以我们的数据库包含

term_id | name         | slug
100       Code Snippet   $_POST['y']

您现在可能会看到下次拨打电话时

$wpdb->update("$wpdb->terms", array('slug' => $_POST['y']), array('slug' => 'code-snippet'));

它不会找到slug字段为code-snippet的记录,它将失败。

我建议您使用term_id(或任何其他唯一字段)作为更新中的where子句。

答案 1 :(得分:0)

$wpdb->update("$wpdb->terms", array('slug' => $_POST['y']), array('slug' => 'code-snippet'),array( '%s' ),array( '%s' )  );

您可以在此处详细了解更新http://codex.wordpress.org/Class_Reference/wpdb#UPDATE_rows