0

编辑:让我重新表述这个问题,我如何编写数据库查询来说出这样的话..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 数据库交互,这是一个又一个教程的地狱阅读教程,但这就是你学习的方式......

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

2 回答 2

0

看来您的 Update 命令并非万无一失,让我们来看看代码。

$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 子句。

于 2013-07-12T08:14:12.470 回答
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

于 2013-07-12T08:16:24.640 回答