php - mysql: wp 数据库更新

标签 php mysql

所以,我有以下 js 和 php:

JS:

var names = jQuery('#name').val();
data : {'action':'AJAX' , name:names },

#name 值为 "mike,sean,steve"

PHP:

global $wpdb;
$names      = $_POST['name'];   
$table      = $wpdb->prefix . 'my_name';    
$RSS_UPDATE = $wpdb->get_col("SELECT update_number FROM $table WHERE id_name IN ($names)"); 

//update_number are int (example: 0,3,1,2)

$name  = explode(',', $names);
if ( $RSS_UPDATE ){
    foreach ( $RSS_UPDATE as $RSS_SINGLE ){         
        $RSS_ROW_NEW  = $RSS_SINGLE + 1;            
        $wpdb->update($table, array('update_number' => $RSS_ROW_NEW),array( 'id_name' => $name));               
    }   
}   

所以,几件事:

我想要实现的目标:

根据输入的值,得到对应的update_number。然后将每个值增加“1”并使用新值更新同一列。

错误

  1. 查询 SELECT update_number FROM wp_my_name WHERE id_name IN (Array) 的“where 子句”中的未知列“Array”

  2. 总的来说,有些地方不对...

有人可以帮帮我吗?

谢谢。

编辑:

这样看起来对吗?

if(!empty($_POST['name'])) {    
    $names      = $_POST['name'];   //array
    $table      = $wpdb->prefix . 'rh_subs';
    $query      = "SELECT update_number FROM $table WHERE id_name = %s";    
    $RSS_UPDATE = $wpdb->get_results($wpdb->prepare($query, $names));
    if(!empty($RSS_UPDATE)) {
        foreach($RSS_UPDATE as $RSS_SINGLE) { // for each row
            $RSS_ROW_NEW  = $RSS_SINGLE->update_number + 1;
            $wpdb->update($table, array('update_number' => $RSS_ROW_NEW),array('id_name' => $RSS_SINGLE->id_name));
        }
    }
 }  

最佳答案

正如我在您之前的帖子的评论中所说的那样,由于您正在接受多个输入,因此您需要使用 WHERE IN 子句。

简单的例子是这样的:

$_POST['name']; // these are comma delimited string of names
// "mike,sean,steve"

所以本质上,您需要在 WHERE IN 子句中构造它们,如下所示:

WHERE id_name IN ('mike', 'sean', 'steve')

不安全和最肮脏的方法是直接爆炸 - 在字符串上加上引号 - 再次用逗号将其内爆:

$names = array_map(function($e){
    return "'$e'";
}, explode(',', $test));
$names = implode(',', $names);
// 'mike','sean','steve' // SATISFIES WHERE IN CLAUSE
// BUT UNSAFE!

因此,为了安全地执行此操作,请使用 wpdb 准备好的语句。 (这可以帮助您入门)。

if(!empty($_POST['name'])) {
    $names = explode(',', $_POST['name']); // explode the comma delimited string into an array
    $table = $wpdb->prefix . 'my_name';  
    $stringPlaceholders = implode(', ', array_fill(0, count($names), '%s')); // create placeholders for the query statement, this will generate
    $statement = $wpdb->prepare("SELECT update_number, id_name FROM $table WHERE id_name IN ($stringPlaceholders)", $names); // create the statement using those placeholders
    $RSS_UPDATE = $wpdb->get_results($statement); // execute

    // fetch resuls
    if(!empty($RSS_UPDATE)) {
        foreach($RSS_UPDATE as $RSS_SINGLE) { // for each row
            $RSS_ROW_NEW  = $RSS_SINGLE->update_number + 1;
            $wpdb->update($table, array('update_number' => $RSS_ROW_NEW),array('id_name' => $RSS_SINGLE->id_name));
        }
    }
}

注意:您当然可以自己发挥创意。我认为您可以将 UPDATEWHERE IN 子句结合起来,这样您就可以将所有这些执行一次。

关于php - mysql: wp 数据库更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35075101/

相关文章:

php - 完成文本输入后加载 jquery 函数

php - 在 Zend Framework 2 应用程序的表单集合中使用 dgrid

php - 比较四个字符的字符串时,有什么简单的方法可以检查两个或多个字符是否相等?

PHP 变量与数组

php - 带有类、命名空间和 psr-0 自动加载的 Wordpress 插件

php - 将 mySQL 查询显示为 JSON 对象

java - 服务器使用我在代码中甚至没有提到的表

php - MySQL Where 子句值 0 和 1 无法正常工作

optimization - 优化MySQL查询: Is it always possible to optimize a query so that it doesn't use "ALL"

mysql - 使用 Solr,我还需要 SQL 数据库吗?