编辑:让我重新表述一下这个问题,我该如何编写数据库查询来表达这样的内容。。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