• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ランダム文字列をDBにINSERT)

ランダム文字列をDBにINSERTする方法は?

hola1973の回答

  • hola1973
  • ベストアンサー率45% (5/11)
回答No.1

私なら、ユニーク文字列を $id = md5 (uniqid (rand())); として、32桁で返します。 実装が簡単ですよ。

参考URL:
http://jp.php.net/manual/ja/function.md5.php
ibushi_007
質問者

お礼

ご回答ありがとうございます。 ご提示頂いた $id = md5 (uniqid (rand())); としますと、完全に重複することはないのでしょうか? 可能性がわずかでもある場合は何かしらの処理が必要かと思われますので。 また、一応条件に、文字列は10桁(バイト数)とありますので、 できましたらこれに沿って頂けると助かります。

関連するQ&A

  • CGIで生成したランダムな文字列を、ユニークなカラムにINSERTする方法は?

    多重アクセスの問題です。 現在は、↓のようにしております。 (1) まず初めに、ランダムな文字列(例えば、「ptB0RzT8jtERPH8z」)を、CGIで生成します。 (2) その「ptB0RzT8jtERPH8z」をユニークなカラムにINSERTするのですが、   既に、「ptB0RzT8jtERPH8z」があると、DBエラーになりますので、   SELECTして、「ptB0RzT8jtERPH8z」がないかどうかをチェックします。 (3) あれば(1)に戻って、ランダム文字列を再生成、   なければ、INSERTします。 しかしこの場合、(2)でSELECTして、(3)でINSERTする間に、 別のユーザーが、「ptB0RzT8jtERPH8z」をINSERTすれば、 (3)で、DBエラーを起こします。 どのようにすれば、解決できるでしょうか? ちなみに、DBはMySQL5です。 エラったらdieせずに、rollbackすれば?との意見もあるかもしれませんが、 DBIコネクト時に、RaiseErrorをオンにしています。

    • ベストアンサー
    • Perl
  • 文字列に対してPHP上で一括置き換えしたい

    DBにあるテーブルの指定されたカラム全てを文字列に対してPHP上で一括置き換えしたいです。 phpアドミン上でSQL文を使って UPDATE `テーブル名` SET フィールド名A=REPLACE (フィールド名A,"置換前の文字列","置換後の文字列"); で実行したらうまくいくのですが、 これをPHP上で処理したいと考えてます。 require("godb.php");//DBにアクセス $sql ="UPDATE テーブル名 SET フィールド名 = REPLACE(フィールド名,"AAA","BBB")"; mysql_query($sql2); と実行してもうまくいきません。。。 これって、、、一個一個対象カラムをPHP上で取り出してから 処理をかけないといけないのでしょうか。。 アドバイスいただけたら幸いです。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 長さ1の空文字列?

    タイトルの通り、長さ1の空文字列で困っています。 現在、Linux、Apache、MySQL、PHPを使って3階層アプリケーションを作っています。 予めMySQLでテーブルの形を決めておいて、CSVからデータを読み込ませておき、 PHPでSQL文を実行してレコードを取得することで、それらをユーザに表示という感じです。 複数あるカラムのうち、空文字列(CSV上でブランクだったもの)は表示させたくないので、 PHPで「 if(カラム=="")~ 」のように比較することで、空文字列だけ避けるつもりでした。 しかし上手くいかなかったので、strlen()で調べて見たところ、返り値が1でした。 本来は空文字列に対してstrlen()は0或いはfalseの返り値を返しますよね。 is_empty()でも空データ扱いにならず、当然NULLの扱いでもありません。 そのため、実データとの区別が出来ずに困っています。 何故、空文字列のカラムを除外したいかというと、 DB上のユニークなレコードを検索したいからです。 select * from where カラム='データ' and カラム='データ'… という風に。 「カラム=''」としてしまうと検索に引っかからなくなってしまいます。 どうすればよいでしょうか。 以下はそれぞれのバージョンです。 MySQL:5.0.95 PHP:5.1.6 Linux:RHEL5 Apache:2.2.3

    • ベストアンサー
    • PHP
  • ランダム文字列

    srand; @array = a .. z; @new; while ( @array ) { push( @new, splice(@array , rand @array , 1) ); } print @new, "\n\n"; print "<br>"; print @new, "\n\n"; print "<br>"; print @new, "\n\n"; ↑のような感じでランダム文字列の作成を考えています。 上記スクリプトですと、 aewpodigtusnkjycfxvmzqrlhb aewpodigtusnkjycfxvmzqrlhb aewpodigtusnkjycfxvmzqrlhb ↑のようにどの行も同一文字列になってしまいます。これを、行毎に異なった8文字のランダム文字列にしたいのですが、方法がわかりません。 いっぺんに100行のランダム文字列を生成する必要があります。どうぞよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • DBで大文字小文字を区別せずINSERTする方法

    データベースに関する質問です。 現在、学校でデータベースを使用したシステムを開発しています。 データベースは主にPostgreSQLを使用しています。 データをINSERTする際に大文字小文字を区別せず、 同じ文字列であるかどうかチェックする方法はありますか? たとえば、「abc123」と「aBc123」を同一とみなし INSERTできないようにしたいです。(主キーのため) システム側ではなく、できればデータベース側で判定を行いたいです。 宜しくお願い致します。

  • php db 文字化け

    文字コードEUC-JPで開発しています。 題名の通り文字化けします。 どうやらDBからselectやinsertしたときに文字化けをするようです。 selectですと文字化た値が取れますし、 insertでは文字化けするためinsertできずエラーとなります。 sql直前で mysql_query("set names EUC-JP"); も行っています。 テーブルの文字コードはオプションで eucjpms -- UJIS for Windows Japanese としています。 個別に該当カラムもそうしています。 何がまずいでしょうか?

    • 締切済み
    • PHP
  • パラメータをランダム文字列で表わしたい

    某サイトでリンクをクリックすると、下記のようにランダム文字列がパラメータとして渡されるものがあります。 http://www.foobar.jp/cgi-bin/abcd.cgi?a=10004414&b=PMird395j ランダム関数で生成?もしくは暗号化?しているのではないかと思うのですが、例えば商品番号などをそのままの数値でなく暗号化することができれば、セキュリティの向上にもつながるのではないかと思います。 このような文字列をPHPで簡単に生成する方法には、どのようなものがあるでしょうか。もちろん、文字列から元のIDや番号を復元できなければなりません。暗号化を使うのが良いのでしょうか。

    • ベストアンサー
    • PHP
  • ある文字列の一部がDBに有るか調べたい。

    このような検索は出来ますでしょうか? PHP 5.1.6 Mysql5.0.45 で運用しています。 テーブルにemailのフィールドがあります。 名前<***@*******.com> と言う文字列のメールアドレスが テーブルのemailフィールドに有れば、その列をselect したいのです。 宜しくお願いいたします。

    • ベストアンサー
    • MySQL
  • Accessへ日付をINSERT

    今Access2000のテーブルから文字として受け取ったデータを 同じくAccessの別テーブルの日付型にINSERTしようとしています。 ソフトはVC6.0を使用しています。 受け取るSELECTはうまくできています。 UCHAR sqlstr [ ] ="INSERT INTO テーブル名"           "(カラム1、カラム2、カラム3)"           "VALUES(?,?,?)"; INSERTはこのようにSQL文を用意しておいてSQLExecuteで SQL文を実行しようとしています。 この場合にカラム1が日付型だとしたら、 「?」のパラメータには文字として渡し、 SQL文のなかで "VALUES(to_date(?,'YYYYMMDD'),?,?)"; とすればうまくいくと思ったのですができません。 いろいろサイトを見るとAccessでは「’」ではなく「#」を使うと 書いてあったので to_date(?,#YYYYMMDD#) とやったのですがエラーになってしまいます。 ちなみにパラメータとして渡す文字列は「20020413」という 8桁の普通の文字です。 どなたか知っている方いませんでしょうか? 他に方法があればそれでも構いません。 どうか教えてください。m(__)m どうしても先へ進めません…。

  • OracleのLONG型への insert について

    お世話になります。 ASP + Oracle8.0.5で開発中のシステムがあるのですが、 ASP上のテキストエリアに文章を記述して、OracleのテーブルのLONG型のカラムに対して insertを行うとエラーが起こってしまいます。 正しくは、全角で2000文字までは入力できるのですが、 それを越えてしまうと、ORA-01461エラー(LONG値はLONG列にのみバインドできます)という エラーが起こってしまい、カラムに対してinsertすることができません。 テーブルを見直してみたのですが、ちゃんとLONG型に設定してありました。 LONG型のカラムにデータを登録する際、4000バイト以上の文字列は挿入できないでしょうか? でもLONG型って、2GBまで使用できるはずでしたよね? ご教授のほど、よろしくおねがいします。