我有一个php逗号分隔的字符串$string = (a,b,c)
我在mysql中有一个包含项(b,c,d)
的列
我想将列更新为(a,b,c,d)
答案 0 :(得分:0)
你真的不应该在一个字段中将多个值存储在数据库中 - 即使它可以做你想做的事情,但它的效率非常低。考虑规范化模式并使用与两个表的一对多关系。
如果你必须,那么你可以拥有如下所示的东西。请注意,您必须为此代码添加错误处理。
//connect to the database and read existing data
$dbh = new PDO(CONNECT_STRING, USERNAME, PASSWORD);
$dbs = $dbh->query("select data_string from my_table where id=1");
$row = $dbs->fetch(PDO:FETCH_NUM);
$dbs->closeCursor();
//strip parentheses and convert string to array
$cur_data = str_getcsv(substr($row[0], 1, -1));
//strip parentheses and convert new data to array
$string = "(a,b,c)";
$add_data = str_getcsv(substr($string, 1, -1));
//merge existing and new data eliminating duplicates
$new_data = array_unique(array_merge($cur_data, $add_data));
//create new csv string for the merged data
$output = fopen('php://output', 'w');
ob_start();
fputcsv($output, $new_data);
fclose($output);
$value = ob_get_clean();
//update database table with new csv string with parentheses
$dbs = $dbh->prepare("update my_table set data_string=? where id=?");
$dbs->execute(array("($value)", 1));
$dbs->close();
看看需要多少不必要的工作?我真的恳请你重新设计你的架构。
答案 1 :(得分:0)
我想这就是你想要的。
<?php
$string = "b, c, d";
$pieces = explode(",", $string);
for($index=count($pieces); $index>0; $index-- ){
$pieces[$index] = $pieces[$index-1];
}
$pieces[0] = "a";
$string = implode(", ", $pieces);
echo $string;
?>
答案 2 :(得分:0)
$string = '(a,b,c)';
$column = '(b,c,d)';
$string = substr($string, 1, -1);
$column = substr($column, 1, -1);
$string = explode(',', $string);
$column = explode(',', $column);
$result = array_unique(array_merge($string, $column), SORT_STRING);
$result = '(' . implode(',', $result) . ')';
现在你得到了线索。