str_replace 变量生成的字符串不适用于 php

Posted

技术标签:

【中文标题】str_replace 变量生成的字符串不适用于 php【英文标题】:str_replace with variable generated string not working with php 【发布时间】:2016-03-02 21:11:10 【问题描述】:

我确定这与使用变量填充字符串有关,但我不确定如何解决此问题。

我有一个通过变量填充的 sql 语句,该变量可能包含也可能不包含数据,这就是我必须这样做的原因。

例子

if ($data1 != '') 
    $col1 = "col1 = '".$data1."', "

if ($data2 != '') 
    $col2 = "col2 = '".$data2."', "

if ($data3 != '') 
    $col3 = "col3 = '".$data3."', "

并非每个$data 都可能包含某些内容,因此某些变量将为空且不属于我的 SQL 语句,但假设所有三个变量都有数据。

$sql = "UPDATE table SET $col1$col2$col3 WHERE ID = '$ID'";

然后产生

$sql = "UPDATE table SET col1 = 'data1', col2 = 'data2', col3 = 'data3', WHERE ID = '$ID'";

问题是, WHERE之前的sql语句中的最后一个逗号。这需要删除。

所以我尝试了

$sql = "UPDATE table SET $col1$col2$col3 WHERE ID = '$ID'";
$sql = str_replace(", WHERE", " WHERE", $sql);

但这似乎忽略了它。我想也许我需要先做类似strval($sql) 的事情,但还是没有用。

有没有办法让它工作?我是否也让这变得比我需要的更难?

【问题讨论】:

因为$col3 可能并不总是语句中的最后一个变量。请记住,如果数据为空,它将有一个空变量,因此不会出现。我无法确定哪个变量总是最后一个,这就是为什么我必须在每个变量的末尾加一个逗号。 【参考方案1】:

代替:

if ($data1 != '') 
    $col1 = "col1 = '".$data1."', "

if ($data2 != '') 
    $col2 = "col2 = '".$data2."', "

if ($data3 != '') 
    $col3 = "col3 = '".$data3."', "

使用类似的东西:

$update_arr = array();
if ($data1 != '') 
    $update_arr[] = "col1 = '".$data1."'";

if ($data2 != '') 
    $update_arr[] = "col2 = '".$data2."'";

if ($data3 != '') 
    $update_arr[] = "col3 = '".$data3."'";

然后像这样创建查询的更新部分:

if ($update_arr) 
    $sql = "UPDATE table SET ".implode(", ", $update_arr)." WHERE ID = '$ID'";

【讨论】:

【参考方案2】:

您可以使用rtrim() 删除最后一个逗号,执行以下操作:

$columns = null;
if ($data1 != '') 
  $columns = "col1 = '$data1', ";

if ($data2 != '') 
  $columns .= "col2 = '$data2', ";

if ($data3 != '') 
  $columns .= "col3 = '$data3', ";


if ($columns) 
  // remove any trailing ','
  $columns = rtrim($columns, ',');

  $sql = "UPDATE table SET $columns WHERE ID = '$ID'";

【讨论】:

以上是关于str_replace 变量生成的字符串不适用于 php的主要内容,如果未能解决你的问题,请参考以下文章

Sass lightness() 函数不适用于 TailwindCSS 主题变量

“上次修改时间”不适用于自定义变量

关联数组不适用于 eval() JavaScript

Routerlinkactive在Angular 8中的页面加载时不适用于动态生成的路由

str_replace用法

php 去掉字符串中的一段字符串