如何更新mysql中的文本字段

时间:2015-04-13 17:54:45

标签: php mysql wordpress

在我的wordpress博客中,我有一个由用户和他们的产品组成的表格,由“;”分隔例如:

       mytable
----------------------
userid  | products
----------------------
   1    | camera
   2    | books;keyboard;computer
   3    | mouse;printer
   4    | scanner

现在在我的脚本中,用户将添加一个新产品,所以我需要检查该用户是否有超过3个产品,因为在这种情况下我将什么都不做,不会为他添加此产品,但如果他少于3产品我需要将新产品添加到他的产品中,并以“;”分隔类似的东西:

$userid = 3;
$newproduct = "ball"


if (pruduct field for that user has more than 2 ";" ) {

   do nothing

 }else{


$wpdb->update( 
'mytable', 
array( 'product' => concat(product, ";", $newproduct)), 
array( 'userid ' => $userid ), 
array( '%s' ), 
array( '%d' ) 
);

所以这个例子的结果是:

       mytable
----------------------
userid  | products
----------------------
   1    | camera
   2    | books;keyboard;computer
   3    | mouse;printer;ball
   4    | scanner

2 个答案:

答案 0 :(得分:1)

尽管有数据规范化参数,非常有效,如果由于某种原因你无法纠正它并且必须使用现有的。

选择products列作为字符串,并使用PHP explode()implode()函数。你最终会得到这样的东西:

$current_products = explode(';', $user['products']);
// $current_products is now an array of the user's products.
if !(count($current_products) >= 3) {
    $current_products[] = $new_product;
}
$user_products = implode(';', $current_products);
// Insert $user_products into your table via UPDATE

implodeexplode函数根据给定的分隔符将字符串转换为数组。

答案 1 :(得分:0)

在WordPress中,正确的方法是使用user_meta表。尊重,你建议的方式不是一个好方法。

您可以使用以下代码将这些值设置到user_meta表中。

$meta_key = '_my_products'; /* be sure to choose a unique key prefix */
add_user_meta( $userid, $meta_key, 'football', false );
add_user_meta( $userid, $meta_key, 'basketball', false );

您可以使用此类代码取回它们

$vals =     get_user_meta( $userid, $meta_key, false );
foreach ($vals as $value) {
     echo $i;
} 

还有其他功能可用于更新和删除user_meta项目。他们运作良好。读这个。 https://codex.wordpress.org/Function_Reference/get_user_meta