首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP preg_replace或REGEXP

PHP preg_replace或REGEXP
EN

Stack Overflow用户
提问于 2015-03-24 20:21:20
回答 3查看 3.3K关注 0票数 0

需要PHP MYSQL查询,该查询将数据从一列复制到另一列,同时在将数据放入新列之前剥离其编号。试过以下几点:

代码语言:javascript
复制
$sql = "SELECT time FROM `arms`";
$results = $conn->query($sql);
$sql = "update `arms` set colB=preg_replace("/[0-9]/", "", 'colA')";
$results = $conn->query($sql);

也试过

代码语言:javascript
复制
$sql = "update arms_ms set colB= " .preg_replace("/[0-9]/", "", colA). ""; 

也试过

代码语言:javascript
复制
$sql = "update arms_ms set colB= colA REGEXP /^([^0-9]*)$/;  

甚至尝试过

代码语言:javascript
复制
$sql = "update arms_ms set colB= common_schema.replace_all(colA,'0123456789','') ";

上述任何一项都不起作用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-24 20:35:01

类似于:

代码语言:javascript
复制
// get records
$sql1 = "SELECT primary_key, colA, colB FROM `arms`";
$results = $conn->query($sql1);
// prepare statement
$sql2 = "UPDATE `arms` SET colB=? WHERE primary_key=?";
$stmt = $conn->prepare($sql2);
// loop & update
foreach( $results as $record ) {
  $args = array(
    preg_replace("/[0-9]/", "", $record['colA']),
    $record['primary_key']
  );
  $stmt->execute($args);
}

但是这更多地是用PDO编写的,如果您使用的是MySQLi,则可能需要进行一些调整。

票数 0
EN

Stack Overflow用户

发布于 2015-03-24 20:31:29

MySql可以链式替换函数,如下所述:Can MySQL replace multiple characters?

在你的例子中,有10个数字,这不是很舒服,但会导致你的目标。

更详细的方法可以是定义函数,如这里所描述的:Removing numbers from string in mysql

很抱歉我使用了答案函数来做一些类似评论的事情,但是我不能给出评论。

票数 0
EN

Stack Overflow用户

发布于 2015-03-24 20:35:00

正如其他人所指出的,您不能简单地就地编辑SQL查询,也不能随意地将PHP注入查询中并期望它正常工作。您需要获取所需的列值,去掉数字,然后执行第二个查询以更新所需的列/行:

代码语言:javascript
复制
$sql = "SELECT colA FROM arms WHERE blahblah";
$row = $conn->query($sql)->fetch_array(MYSQLI_ASSOC);
$col = preg_replace(/[0-9]/", "", $row['colA']);
$sql = "UPDATE arms SET colB = $col WHERE blahblah";
$conn->query($sql);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29242138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档