所以,我有以下 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”并使用新值更新同一列。
错误
查询 SELECT update_number FROM wp_my_name WHERE id_name IN (Array) 的“where 子句”中的未知列“Array”
总的来说,有些地方不对...
有人可以帮帮我吗?
谢谢。
编辑:
这样看起来对吗?
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));
}
}
}
注意:您当然可以自己发挥创意。我认为您可以将 UPDATE
和 WHERE IN
子句结合起来,这样您就可以将所有这些执行一次。
关于php - mysql: wp 数据库更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35075101/