str_replace与变量生成的字符串不能与PHP一起使用

时间:2016-03-02 21:11:11

标签: php str-replace

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

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

实施例

private void DoStuff()
{
    AppDomain.CurrentDomain.UnhandledException += HandleUnhandledException;


    var sql = new StringBuilder();
    if (updateModel.IsUseGroupNumberSelected)
    {
        AppendCommaIfNeeded(sql);
        sql.Append("GroupNumber = @p_GroupNumber");
        cmd.Parameters.AddWithValue("@p_GroupNumber", updateModel.Group.GroupNumber);
    }
    if (updateModel.IsUseTerminationDateSelected)
    {
        AppendCommaIfNeeded(sql);
        sql.Append("GroupNumber = @p_GroupNumber");
        cmd.Parameters.AddWithValue("@p_TerminationDate", updateModel.Group.TerminationDate);
    }
    if (updateModel.IsUseLocationSelected)
    {
        AppendCommaIfNeeded(sql);
        sql.Append("Location = @p_Location");
        cmd.Parameters.AddWithValue("@p_Location", updateModel.Group.Location);
    }
    sql.Insert(0, @"UPDATE [Group] SET ");
    sql.Append(" WHERE GroupID = @p_GroupID");
    cmd.Parameters.AddWithValue("@p_GroupID", updateModel.Group.GroupID);
}

private void AppendCommaIfNeeded(StringBuilder toBuilder)
{
    if (toBuilder.Length > 0) toBuilder.Append(",");
}

并非每个if ($data1 != '') { $col1 = "col1 = '".$data1."', " } if ($data2 != '') { $col2 = "col2 = '".$data2."', " } if ($data3 != '') { $col3 = "col3 = '".$data3."', " } 都可能包含某些内容,因此某些变量将为空且不属于我的SQL语句,但我们假设这三个变量都包含数据。

$data

然后产生

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

问题是$sql = "UPDATE table SET col1 = 'data1', col2 = 'data2', col3 = 'data3', WHERE ID = '$ID'"; 之前的sql语句中的最后一个逗号。这需要删除。

所以我试过

, WHERE

但这似乎忽略了它。我想也许我首先需要做$sql = "UPDATE table SET $col1$col2$col3 WHERE ID = '$ID'"; $sql = str_replace(", WHERE", " WHERE", $sql); 这样的事情,但是再一次做不到。

有没有办法让它发挥作用?我是否比我需要的更难?

2 个答案:

答案 0 :(得分: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'";
}

答案 1 :(得分:-1)

您可以使用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'";
}