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

Php 选择数据库中的项目,然后更新?,php,database,wordpress,Php,Database,Wordpress,编辑:让我重新表述一下这个问题,如何编写数据库查询来表示这样的内容PUT$\u POST['y'],其中列为'slug',term\u id=100显然不是正确的sql语法。。但我觉得这样的东西能满足我的需要吗?对 我试图更新数据库中的一个项目,在每次更改时使用一个动态变量的值(意味着变量经常更改),我不想添加一个新行(这就是正在做的),而是想保留那一行并更新一部分 global $wpdb; 一些变量,这些东西进入我的数据表 //The data here comes fro

编辑:让我重新表述一下这个问题,如何编写数据库查询来表示这样的内容
PUT$\u POST['y'],其中列为'slug',term\u 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));
我可以用我的动态值$\u POST['y']更新我们声明为“代码片段”的slug列,但只能更新一次。。。我如何不断更新它

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

    die();
更新添加了AJAX代码,以防……(这很好用。我只是专注于在进行新AJAX调用时更新一行……我可以在进行AJAX调用时创建一行。只是不知道如何查询它,以便它替换旧的AJAX值)

更新:

     //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();

您可以从图像中看到,
648
是以前的
'code-snippet'
,但当数字更改为
723
时,它不会更新。。显然,因为我们告诉它更新
“code-snippet”
,所以我正试图找出如何编写它,以便它符合我的需要

更新:我希望这能显示出我试图实现的目标的简单性

解决:多亏了@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命令,说明“更新slug所在的记录
代码段
,并将其更改为
$\u POST['y']

所以我们的数据库包含

term_id | name         | slug
100       Code Snippet   $_POST['y']
你现在可能已经知道下次打电话的时候

$wpdb->update("$wpdb->terms", array('slug' => $_POST['y']), array('slug' => 'code-snippet'));
它找不到slug字段为
代码段的记录,它将失败

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

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

您可以在此处阅读有关更新的更多信息

这是Wordpress的限制吗?大多数数据库允许您多次更新行不会有任何问题。我只是不知道如何编写数据库查询以使用动态变量更新项。发生的事是我在此处指定需要更新的内容默认情况下插入“代码片段”“code snippet”在更新时更改为我的变量值…这是一个数字,因此现在“code snippet”类似于663什么是你的ajaxurl,并且你在第一次将你的ajaxurl设置为静态然后使用动态示例没有ajax是好的..检查最底部OP中的更新..它显示了DB表..ajax是o我需要一个更好的数据库查询语法我需要防止创建多行并将数据插入一行我在控制台中检查了ajax,很好…我知道问题是什么,我不懂数据库语法hahaThis就是问题所在,我刚刚花了24小时-48小时,我尽可能地塞满$wpdb和数据库…我意识到SQL查询已关闭…但我不确定如何编写它以使其更灵活/动态…我尝试过的一件事是使用相同的变量,输出663作为我的术语id,这有点好,每次有新值时,它都会在我的值上创建一个新行,但我n替换新行我想替换同一行中的数据我想你的Ajax调用需要包含更多的数据,你可以添加一个ID,也可以传入当前的slug。这取决于你当时可用的数据类型。它的jquery UI是可拖动的。.Ajax占据了位置,在停止时:Ajax调用已完成…我使用了一个有趣的方法将ajax数据发送到wpdb的操作…在那里,它收到了好的,我只是一个数据库的noob,尤其是查询的正确语法…我觉得ajax没有问题,只是我没有编写正确的查询。我正在重新阅读你的帖子…我忘了尝试你推荐的内容,我会看到where子句是什么术语?好的,那么你呢根据拖动的对象是否具有唯一键?可拖动停止使用两个参数,即事件和ui。我假定您已经在使用ui.position获取“y”值。ui.helper包含指向正在拖动的对象的指针。因此您可以使用ui.helper.attr(“id”)获取该元素的id。然后,如果您将其作为ajax调用中的另一个参数添加到db脚本中,它应该对您的db脚本可用。我已经读了一整天了。答案可能就在我眼皮底下。但是我很难形成符合我需要的逻辑代码,并根据每次用户更新的ajax值更新行做一个动作并输出一个值…读这篇文章我认为你正在使你的插件很酷我的书签这似乎是在正确的轨道上为我所寻求的…谢谢这节省了我很多挖掘。。。