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

しかし、上記のコードは次のような出力を提供します。

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

したがって、最後にコンマを削除する必要があります。スクリプトが最後の行でカンマを無効にしていることを確認するにはどうすればよいですか。

4

6 に答える 6

2

私の意見では、提案されているよりもきれいな方法は次のとおりです。

$forms = array();
while ( $row_form_permissions = mysql_fetch_assoc($sql_form_permissions) )
  $forms[] = $row_form_permissions['form_id'];

$sql_query_posts .= " IN (".implode(",",$forms).")";
于 2013-06-09T09:59:53.477 に答える
2

$sql_query_posts = substr($sql_query_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);
$sql_query_posts .= ")";

フェッチされたレコードがない場合 (空の配列) に対処するために、次のように implode() を使用する方が賢明かもしれません (私は常にそのように使用します)。

$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));
于 2013-06-09T09:55:22.720 に答える
0

代わりに、カンマを取り除くためにsubstr使用することもできます。trim

$sql_query_posts = trim($sql_query_posts, ',') . ')';

Trim は、正確な文字または文字セットに制限できるため、substr よりもわずかに安全です。

于 2013-06-09T09:59:37.730 に答える