如何从追加查询字符串中删除最后一个逗号

时间:2013-01-22 13:03:29

标签: php mysql mysqli

好的,如果您阅读标题,那是一个好兆头。我在这里不太熟悉的一些地方弄湿了。

为了节省每个人阅读的时间,我有一系列复选框(适当命名):

<input type="checkbox" name="skills[]" value="5"> C<br />
<input type="checkbox" name="skills[]" value="6"> C+<br />

我可以通过将值附加到原始查询来将一个复选框值保存到MySQLi DB。当$max == 1

当我添加第二个值时,我需要在添加的值之间添加逗号。所以,我在$max > 1时这样做。

我以为我可以简单地从查询字符串中删除最后一个逗号,MySQL就能正常工作。但是,substr函数不会删除逗号/或任何内容。当我输入多行值时,我只需要想办法删除最后一个逗号。

这是我的代码:

  $query= "INSERT INTO individual_skills(Skills_ID,Ind_ID) VALUES ";
  $max = sizeof($skills);
  for ($i=0; $i<$max;$i++) {   
       if ($max == 1) { 
            // appending the query above with the values
            $query.= " (" .$skills[$i]. ",".$_SESSION['Ind_ID'].")";    
           } // END IF MAX == 1  

        if ($max > 1) {  
            // appending the query above with the values
            // same query as above except note the comma at the end for the MySQL query
            $query.= " (" .$skills[$i]. ",".$_SESSION['Ind_ID']."),";
            substr($query,0,-1);        
        } // END IF MAX > 1

  }   // END FOR LOOP

5 个答案:

答案 0 :(得分:3)

而不是疯狂的str_replaceif语句,您可以使用数组,然后implode使用一个很好的字符串:

$query      = "INSERT INTO individual_skills (Skills_ID, Ind_ID) VALUES ";
$max        = sizeof($skills);
$parameters = array();

for ($i=0; $i<$max; $i++) {
    $parameters[] = " (" .$skills[$i]. ", ".$_SESSION['Ind_ID'].")";
}

$query .= implode(', ', $parameters);

答案 1 :(得分:2)

更改

substr($query,0,-1);

$query = rtrim($query, ",")

rtrim removes characters from the end of a string并且返回

您还需要将其移动到循环的末尾,您也可以删除代码重复 - &gt;

$max = sizeof($skills);
for ($i=0; $i<$max;$i++) {   
  $query.= " (" .$skills[$i]. ",".$_SESSION['Ind_ID'].")";      
  if ($max > 1) {
     $query .= ",";
  } // CLOSE IF
}   // END FOR LOOP
// Now remove the last comma if required
if ($max > 1) { 
   $query = rtrim($query, ",");
}

答案 2 :(得分:2)

你的代码遭受了太多的重复 它实际上可以写得很简短并且可以用 并且它也遭受SQL注入

$query = "INSERT INTO individual_skills VALUES ";
$comma = '';
foreach($skills as $skill) {
    $skill = intval($skill);
    $indid = intval($_SESSION['Ind_ID']);
    $query.= "$comma ($skill, $indid)";
    $comma = ',';    
}

在处理器周期和编写代码方面都很短。

  

但是,substr函数不会删除逗号/或任何内容。

确实如此。你只是错误地使用它。哟需要将结果分配给变量。手册页总是有帮助的。

答案 3 :(得分:2)

我要做的是使用php implode()函数来处理这类事情。 我就是这样做的:

$query= "INSERT INTO individual_skills(Skills_ID,Ind_ID) VALUES ";
$value_array = array();
foreach($skills as $skill) {
    $value_array[] = "(" .$skill. ",".$_SESSION['Ind_ID'].")";
}
$query = "INSERT INTO individual_skills(Skills_ID,Ind_ID) VALUES ". implode(', ', $value_array);

答案 4 :(得分:0)

您的想法和substr完全正确,但您实际上并没有使用它的返回值。您需要做的就是将返回值放回$query

$query = substr($query, 0, -1);

您也可以尝试这样做,这样就可以通过简单地不在最后一个条目上添加逗号来减轻对substr所有人的需求。

$query= "INSERT INTO individual_skills(Skills_ID,Ind_ID) VALUES ";
$max = sizeof($skills);
for ($i=0; $i < $max; $i++)
{
    $query .= " (" . $skills[$i] . ", " . $_SESSION['Ind_ID'] . ")";
    if ($max > 1 && $max != ($i+1))
        $query .= ",";
}