Php MySQL查询中的逗号

Php MySQL查询中的逗号,php,mysql,comma,Php,Mysql,Comma,现在我正在努力解决的问题是: $sql_query_posts = "SELECT * FROM `posts`"; $sql_form_permission = mysql_query("SELECT * FROM `integrations` WHERE `rank_id`='$user_level' AND `mode`='form_per'"); if ( mysql_num_rows($sql_form_permissions) > 0 ) { 我希望输出类似于:

现在我正在努力解决的问题是:

$sql_query_posts = "SELECT * FROM `posts`";

$sql_form_permission = mysql_query("SELECT * FROM `integrations` WHERE `rank_id`='$user_level' AND `mode`='form_per'");
    if ( mysql_num_rows($sql_form_permissions) > 0 ) {
我希望输出类似于:

   $sql_query_posts .= " IN (";
    while ( $row_form_permissions = mysql_fetch_assoc($sql_form_permissions) ) { 
    $sql_query_posts .= $row_form_permissions['form_id'] . ",";
    }
    $sql_query_posts .= ")";
    }
但是上面的代码给出了如下输出:

SELECT * FROM `posts` IN (4, 3, 2)

所以我必须去掉结尾的逗号。如何确保脚本禁用最后一行的逗号。

使用
$sql\u query\u posts=substr($sql\u query\u posts,0,-1)如下所示:

SELECT * FROM `posts` IN (4, 3, 2,)
为了解决最终可能无法获取任何记录(一个空数组)的情况,最好使用improde(),如下所示(我总是这样使用它):


您可以使用
substr
去掉逗号。像这样:

$ins = array();
while ( $row_form_permissions = mysql_fetch_assoc($sql_form_permissions) ) {
    $ins[] = $row_form_permissions['form_id'];
}
$sql_query_posts .= sprintf(' IN (%s)', implode(',', $ins));
$sql\u query\u posts.=”IN(“;
而($row\u form\u permissions=mysql\u fetch\u assoc($sql\u form\u permissions)){
$sql\u query\u posts.=$row\u form\u permissions['form\u id']。“,”;
}

$sql\u query\u posts=substr($sql\u query\u posts,0,-1);//我会使用
内爆
来实现:

$sql_query_posts .= " IN (";
while ( $row_form_permissions = mysql_fetch_assoc($sql_form_permissions) ) { 
$sql_query_posts .= $row_form_permissions['form_id'] . ",";
}
$sql_query_posts = substr($sql_query_posts, 0, -1); // <- this is the new line
$sql_query_posts .= ")";
}

作为
substr
的替代方法,您还可以使用
trim
删除逗号

$post_ids = array();
while ( $row_form_permissions = mysql_fetch_assoc($sql_form_permissions) ) { 
    $post_ids[] = $row_form_permissions['form_id'];
}

$sql_query_posts .= " IN (" . implode(",", $post_ids) . ")";

Trim比substr稍微安全一些,因为您可以将其限制为一个确切的字符或一组字符。

在我看来,比建议的更漂亮的方法是:

$sql_query_posts = trim($sql_query_posts, ',') . ')';
在这种情况下,我会使用trim或(rtrim)函数()
您将字符串赋给它,并使用其第二个参数指定额外的字符,它将为您清除该字符。

如果未提取任何记录,该怎么办?我同意至少应检查空结果集,并使用implode()相应地更新答案。我同意应使用implode()而不是substring(),但这个问题的提问方式似乎是子字符串()的要求。我对你的答案进行了投票,以反映使用内爆()而不是子字符串()或trim()的重要性。我刚刚看到你在MaX之前发布了你的答案,所以我也会对这个问题进行评论。我同意应该使用内爆()而不是子字符串(),但这个问题的提问方式似乎是substring()。我对你的答案投了更高的票,以反映使用内爆()而不是substr()或trim()的重要性。
$sql_query_posts = trim($sql_query_posts, ',') . ')';
$forms = array();
while ( $row_form_permissions = mysql_fetch_assoc($sql_form_permissions) )
  $forms[] = $row_form_permissions['form_id'];

$sql_query_posts .= " IN (".implode(",",$forms).")";