implodeで('a','b','c')したい

このQ&Aのポイント
  • PHPのimplode関数を使用して、配列['a', 'b', 'c']を文字列'a,b,c'に変換する方法を教えてください。
  • また、単引用符で囲まれた文字列('a','b','c')を(a,b,c)のように変換する方法も知りたいです。
  • データベースのクエリでクオーテーションで囲まれた文字列を使用する場合、どのように指定すれば良いでしょうか?
回答を見る
  • ベストアンサー

implodeで('a','b','c')したい

タイトルの日本語がおかしいですが。。。。 よろしくお願いいたします。  下記環境です。 PHP Version 5.1.6 mysql 5.0.45 配列で受け取ったものを、 $address= implode(",",$address_aray); これで、  $address = a,b,c となります しかし以下の様に検索をかけるので "select ****** `address` in ('a','b','c') "; (a,b,c) では無く   ('a','b','c') クオンテーションで囲むには、どうしたらいいでしょうか? それとも、全く間抜けなやり方をしているでしょうか? ※カラムは [varchar] にしています。 よろしくお願いいたします。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ざっくりやるなら <?PHP $address_aray=array('a','b','c'); $sql ="select * from hoge WHERE 1"; if(is_array($address_aray)) $sql.= " AND `address` in ('".implode("','",$address_aray)."')"; print $sql; ?> ってことでしょうけど、implodeで処理するとサニタイズが 面倒なのでforeachで回す方がよいかもしれません。 <?PHP $address_aray=array('a','b','c'); $sql ="select * from hoge WHERE 1"; foreach((array) $address_aray as $key=>$val){ if($key==0) $sql.= " AND `address` in ('"; else $sql.= "','"; $sql.=mysql_real_escape_string($val); if($key==count($address_aray)-1) $sql.= "')"; } print $sql; ?>

kiyomidesuyo
質問者

お礼

yamabejp 様 いつもおありがとうございます。 2つ目のソースが、スマートに思えますが すぐに全部理解できない所も有るので、今回は1つ目を使わせていただきました。 以下の様に、変数にして SQL分に加えました。 $address = "('".implode("','",$address)."')"; $sql ="select ******* `address` in '$address'"; 本当ににありがとうございました。

関連するQ&A

  • SET型の値に対する結合について

    MySQLのSET型のそれぞれの値に JOINする方法はありますでしょうか? 内容は下記のような感じです。 < shohin > group(varchar) | item(SET) ------------------------------------- 果物群A | 1,3 ------------------------------------- 果物群B | 2,4 ------------------------------------- < kudamono > id(INT) | kudamono(varchar) -------------------------------- 1 | りんご -------------------------------- 2 | オレンジ -------------------------------- 3 | いちご -------------------------------- 4 | メロン -------------------------------- このような構造の中で 果物群A ... りんご, いちご 果物群B ... オレンジ, メロン とphpで出力したいという内容です。 現状ではshohinからselectでitemの値を呼び出し、 一度、explodeで配列化して、それをfor文でSELECTをかけて、 さらにそこから得られたkudamonoを再度implodeする という回りくどい方法しか考え付きません。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • IEで、implodeが Bad arguments になります。

    配列で次のページに[POST]で渡して[implode] でセレクト文に入れようとしていますが IEではキチンと入ってくれません。*fireFox safari では、何も問題はありません。 IEはどのバージョンも同じです。 環境です CENTOS 5 Mysql 5.0.45 MySQL の文字セット: UTF-8 Unicode (utf8) PHP 5.0 HTML,PHPは UTF-8 で書いています。 クエリの前に print_r($mailID); とすると 1,2,3,4,5,6,7,8 と表示しますが print $sql; で調べると  SELECT * FROM customer WHERE customerID IN (); 同じ事をfireFox safari ですると SELECT * FROM customer WHERE customerID IN (1,2,3,4,5,6,7,8); クエリは下記の用に書いています。 $sql = "SELECT * FROM customer WHERE customerID IN (".implode(",",$mailid).");"; 何が問題なのでしょうか? この現象を改善する(IEでも表示する)、若しくは別の方法は無いでしょうか。。 分かる方、教えて頂けませんか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • implodeについて

    初めまして。すみませんがいきなり質問させてください。 implode についてなんですが、 implode($a,",") とすると、カンマ区切り、たとえば配列されたものが (a,b,c) のようにでてきますよね? このときに ('a','b','c') というように、シングルコーテーションでくくって 出したいのですが、何か良い方法はありませんか? よろしくお願いします。 PHPは4.1でPostgreSQLを使用しております。

    • ベストアンサー
    • PHP
  • mysql_fetch_array結果の配列化

    【ご質問】 あるselect文を実行し、mysql_fetch_arrayで取得した結果を配列したいのですが、どのようにしたら実現できるでしょうか? 【例】 select文の結果で3レコードヒットした場合、 カラム1 カラム2 カラム3 a b c d e f g h i a⇒カラム1[1]、b⇒カラム2[1]、c⇒カラム3[1] d⇒カラム1[2]、e⇒カラム2[2]、f⇒カラム3[2] g⇒カラム1[3]、h⇒カラム2[3]、i⇒カラム3[3]      と配列化したいのです。 ご教授宜しくお願いいたします。

  • POSTGRESでMYSQLと同じ結果を得る方法

    create table test (a varchar(10), b varchar(10)); insert into test values ('a','a'); insert into test values ('b','b'); insert into test values ('b','c'); insert into test values ('c','d'); select count(*), a, b from test group by a; 上記を実行するとMYSQLでは +----------+------+------+ | count(*) | a | b | +----------+------+------+ | 1 | a | a | | 2 | b | b | | 1 | c | d | +----------+------+------+ という結果になる。 POSTGRESでは以下のエラーになります。 ERROR: column "test.b" must appear in the GROUP BY clause or be used in an aggr egate function select count(*), a, b from test group by a, b; とすると結果が変わってしまいます。 MYSQLと同じ結果をPOSTGRESで得るいい方法はありますか?

  • A,B,C----

    英語から韓国語に訳すとき、 A、B、C、and Dは、A、B、C、및 D A、B、C、or Dは、A、B、C、또는 D でいいのでしょうか? また、お父さんとお母さんどっちが好き?という時、 아버지 이나 어머니, 어느 쪽 좋아하세요? でいいのでしょうか? A or Bはどのように表現すればよいのでしょうか?

  • エクセル/式 =OR(A1="A",A1="B",A1="C")について

    A1セルの値がA、B、Cのいずれかであるか否かの判定式は =OR(A1="A",A1="B",A1="C") だと思います。 しかし、いちいちA1=と書くのが面倒なので、 =OR(A1={"A","B","C"}) としてみたら案の定正しく判定されません。たぶんA1が単独の値で、{ }内が配列だからだと思いますが、その理解であっていますか? 次に、 =OR(A1:A1={"A","B","C"}) としたら今度は正しく判定するようですが、この式は=OR(A1="A",A1="B",A1="C")と同じ判定として正しいですか? 正しいとしたら、A1:A1と同じセル指定なのにこれを配列とみなしているのでしょうか?

  • 一つのカラムから、データを分けて取り出す方法

    現在、PHP4とMysql4.1の環境を利用しています。 カラムからのデータ抽出で、うまくいきません。 例えば、カラムに次のような形でデータがあった場合、それをカンマで区切って別々に抽出し、かつ重複を除いてブラウザに表示させるにはどのような方法があるでしょうか。 +-------------+ | A,B,C,A,B,C | +-------------+ 上記配列をDBからmysql_fetch_arrayで取得し、 その後splitして、printしましたが、 ブラウザ上では「array」と表示されてしまいました。 何か方法がありましたら、 ご教授いただければ幸いです。

    • ベストアンサー
    • PHP
  • NULLだったら、aカラムの値をbカラムへコピー

    ■前提 ・MySQLの同じテーブル内に、datetime型の「aカラム」「bカラム」がある ■質問 ・この時、bカラムがNULLだったら、aカラムの値をbカラムへコピーするSQL文を教えてください

    • ベストアンサー
    • MySQL
  • MYSQL バイナリーデータに変換して取得

    MYSQLでSELECTして以下のテーブルのCODEカラムからバイナリーデータに変換してデータを取得したいのですが、どうしたら良いでしょうか? SELECT CODE FROM TABLE_NEME WHERE ID='XXX' <テーブルデータ> CODE(varchar型) 011A00046D0ADC4B

    • ベストアンサー
    • MySQL

専門家に質問してみよう