簡體   English   中英

用變量生成的str_replace生成的字符串不適用於php

[英]str_replace with variable generated string not working with php

我確定這與使用變量填充字符串有關,但是我不確定如何解決該問題。

我有一個通過變量填充的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)事情,但是又沒有用。

有沒有辦法讓它工作? 我是否比我需要的還要難?

代替:

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'";
}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM