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

Php 如何从追加的查询字符串中删除最后一个逗号,php,mysql,mysqli,Php,Mysql,Mysqli,好的,如果你读标题,那是个好兆头。在一些我不太熟悉的地方,我的脚都湿透了 为了节省每个人阅读的时间,我有一系列的复选框,它们的名称是: <input type="checkbox" name="skills[]" value="5"> C<br /> <input type="checkbox" name="skills[]" value="6"> C+<br /> 您的想法和substr是完全正确的,但实际上并没有使用它的返回值。您只需将返回值

好的,如果你读标题,那是个好兆头。在一些我不太熟悉的地方,我的脚都湿透了

为了节省每个人阅读的时间,我有一系列的复选框,它们的名称是:

<input type="checkbox" name="skills[]" value="5"> C<br />
<input type="checkbox" name="skills[]" value="6"> C+<br />
您的想法和substr是完全正确的,但实际上并没有使用它的返回值。您只需将返回值放回$query即可

您也可以尝试这样做,只需在最后一个条目上不添加逗号,就可以减轻对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 .= ",";
}
改变

它返回一个值

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

$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, ",");
}

您的代码重复太多。 它实际上可以写得简短而体贴 它还受到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函数不会删除逗号或任何内容

是的。你只是用错了方法。你需要把它的结果赋给一个变量。手动页面总是有帮助的。

您可以使用数组,然后使用它来生成一个漂亮的字符串,而不是疯狂的str\u replace或if语句:

$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);

我要做的是使用php内爆函数来处理这类事情。 我会这样做:

$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);

我也试过了。不起作用。“我想它可能会以某种方式对待我的问题。”肯特伦霍姆现在就试试看——它应该不会出问题了,现在我已经很接近了。这删除了我这边所有的逗号…不是最后一个。如此接近。有什么建议如何删除最后一个逗号吗?@kentrenholm只需将其向下移动到//END FOR LOOP下,并在if$max>1{}语句中:看起来是这样的:值21,10,22,10,而不是值21,10,22,10WOW!我上课要迟到了,但你的帮助和指导在几分钟内就完成了。我在脑子里说:没有人这么聪明——你是个天才。非常感谢你的帮助。它起作用了。庆典那么,我的回答有什么不同呢除了foreach,这只是口味的问题。你的帖子是在我打字的时候发布的,是什么让你比我快。我想这是唯一的区别-这不是品味的问题,而是更干净的代码。然而,字符串到数组和返回到字符串的转换的想法并不那么清楚。我同意您的观点,foreach提供了比普通循环更干净的代码。转换的全部要点是不必担心PHP本身可以处理的事情。它可能会慢一些,没有测试它,而且它需要更多的内存,这是用常识测试的。但是,如果您需要对内爆提供的更好的可读性进行优化,我相信项目的代码或设置有更本质的错误。
$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, ",");
}
$query = "INSERT INTO individual_skills VALUES ";
$comma = '';
foreach($skills as $skill) {
    $skill = intval($skill);
    $indid = intval($_SESSION['Ind_ID']);
    $query.= "$comma ($skill, $indid)";
    $comma = ',';    
}
$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);
$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);