0

さまざまなデータベース値、特殊文字などの処理に問題があります。

Postgresデータベースを照会するときにYii php、特にCDbCriteriaを使用していますが、エントリの前後に空白があるエントリに問題があります。

私は持っている:

  $criteria = new CDbCriteria;
  $criteria->compare('first_name',trim($name) , false, 'OR'); 
  $criteria->compare('surname', trim($name), false, 'OR');

  $person = Name::model()->find($criteria); 

上記のコードは、入力フォームから $name 変数を指定して、一致する行をデータベースで検索することを想定しています。データベース テーブルの姓または名に空白が含まれていない場合、これは完全に機能します。

例えば:

$name = "Richard";

ただし、データベースでは、first_name の値は次のとおりです。

「[余白]リチャード[余白]」

空白を含む 'Richard'がデータベースにあるため、"Richard" が見つからないため、$person は null を返します。ただし、適切な動作は、それらが基本的に同じ名前であるため、正しく一致する必要があることです (すべてのエントリをトリミングする必要があるため、データベースに空白を含めることは良いことではないことを知っていますが、アプリケーションはこれを処理するのに十分柔軟でなければなりません) )。この問題を解決するにはどうすればよいですか? どうもありがとう!

4

1 に答える 1

1

あなたには2つの選択肢があります

1) レコードを編集するときにプログラムで空白を削除します (参照beforeSave())

2) 基準で TRIM を使用します。

$criteria = new CDbCriteria;
$criteria->condition = "TRIM(first_name) = '".trim($name)."' or TRIM(surname) = '".trim($name)."'";

上記を次のように実行できる場合がありますが、$criteria->compare("TRIM(first_name)"...)わかりません。

于 2013-09-26T05:27:02.093 に答える