PHP MYSQL preg_replace或REGEXP

时间:2015-03-24 20:21:20

标签: php mysql preg-replace

需要一个PHP MYSQL查询,它将数据从一列复制到另一列,同时在放入新列之前剥离数字。尝试以下方法:

$sql = "SELECT time FROM `arms`";
$results = $conn->query($sql);
$sql = "update `arms` set colB=preg_replace("/[0-9]/", "", 'colA')";
$results = $conn->query($sql);

也试过

$sql = "update arms_ms set colB= " .preg_replace("/[0-9]/", "", colA). ""; 

也试过

$sql = "update arms_ms set colB= colA REGEXP /^([^0-9]*)$/;  

甚至尝试了

$sql = "update arms_ms set colB= common_schema.replace_all(colA,'0123456789','') ";

以上都不是。

3 个答案:

答案 0 :(得分:0)

MySql可以链替换功能,如下所述: Can MySQL replace multiple characters?

在你的情况下,有10个数字,它不是很舒服,但会导致你的目标。

更精细的方式可以是这里描述的定义函数: Removing numbers from string in mysql

我很抱歉使用答案功能,例如评论,但我无法发表评论。

答案 1 :(得分:0)

正如其他人所指出的,你不能简单地编辑SQL查询或任意将PHP注入查询并期望它能够工作。您需要获取所需的列值,删除数字,然后执行第二次查询以更新所需的列/行:

$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);

答案 2 :(得分:0)

类似的东西:

// 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);
}

但是,如果您使用的是MySQLi,那么在编写PDO时会有更多内容,如果您使用的是MySQLi,可能需要进行一些调整。