在数据库中选择一个项,然后更新


SELECT an item in a database then UPDATE?

编辑:让我重新表述一下这个问题,我该如何编写数据库查询来表达这样的内容。。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']更新我们声明为"代码片段"的slug列,但只能更新一次。。。如何不断更新?

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

UPDATE添加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 );
         });    
      }  
});

更新:

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

您可以从图中看到,648是以前的'code-snippet',但当数字更改为723时,它不会更新。。很明显,因为我们告诉它要更新'code-snippet',我正试图弄清楚如何编写它,以便它符合我的需求。。

更新:我希望这能展示我试图实现的简单性

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

解决:多亏了@Matt Cooper,我才意识到这是多么容易,现在我真的可以做我想做的事了。在这个过程中,我还学到了一些我将来可以使用的东西,我现在拥有了更多的编码能力,知道如何与wordpress数据库交互,这是一个又一个地狱般的教程,但这就是你学习的方式。。。

解决方案:我添加了一个新的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();

您的Update命令似乎不是万无一失的,让我们来浏览一下代码。

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

这会发送一个SQL命令,说"更新段塞为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'));

它将找不到段塞字段为CCD_ 11的记录并且它将失败。

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

$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