我确信这与使用变量填充字符串有关,但我不知道如何解决问题。
我有一个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);
这样的事情,但是再一次做不到。
有没有办法让它发挥作用?我是否比我需要的更难?
答案 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'";
}