gpt4 book ai didi

php - mysql: wp 数据库更新

转载 作者:行者123 更新时间:2023-11-29 06:17:24 25 4
gpt4 key购买 nike

所以,我有以下 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com