2017-02-09 12 views
2

を比較する前に、私はこのように私のPHPコードでのMySQLのクエリを持っている:私はしたい何PHPのMySQL;編集列の値

$statement = $pdo->prepare('SELECT name FROM persons WHERE name = :name'); 
$statement->execute(array(':name' => "Peter-Loew")); 

"Peter-Loew"と比較する前に:nameを編集することです。

私は "Peter-Loew"と比較する前に :nameに、このようなPHPコードを実行したい

<?php 
function url_replace($url_replace) { 
$url_replace = str_ireplace(array('Ä','Ö','Ü'), array('Ae','Oe','Ue'), $url_replace); 
$url_replace = preg_replace('~[^a-zA-Z0-9]+~', '-', $url_replace); 
$url_replace = trim($url_replace, '-'); 
$url_replace = rtrim($url_replace, '-'); 
return $url_replace; 
} 
?> 

私はこれをどのように行うことができますか?あるいは、誰かが私が探しているものをこれと呼ぶ方法を知っていますか?何かヒント?

+0

あなたが欲しいです'SELECT'を実行する前に' url_replace'を通してあなたの名前を実行するのですか? – Machavity

+0

@Machavityはい、可能ですか? – David

答えて

0

まず、データベースを個別にクリーニングする必要があります。したがって、INSERTまたはUPDATEを実行する場合は、nameフィールドでurl_replaceを実行します。質問のようにチェックを実行すると、照合している値にurl_replaceを実行できます。

つまり、テーブル内のデータを均一になるようにする必要があります。

+0

ああ、データベース上でPHP関数を実行したい – Machavity

+0

私は自分の答えを更新しました。あなたが提案しているように、クエリごとにテーブル全体に対してPHP関数を実行する方法はありません。関数を介してテーブルを個別に、行ごとに洗い流し、そのように更新する必要があります。 – Machavity

+0

答えを更新していただきありがとうございますが、これは私が探しているものではありません。すべての行を更新することは問題ではありません(手動で数分で完了します)。しかし、これは私が探していたものではありません。 – David

0

あなたが望むことは可能ですが、はお勧めできません。、そうしないと、このアプローチで深刻なパフォーマンス問題が発生します。

DBに保存する前に名前を削除することをお勧めします。

あなたがREPLACE機能を使用する必要がありますよりも、あなたが本当に、これを実行する必要がある場合は多くの時間を連鎖し、その後TRIM機能を使用して...

クエリ例:

SELECT name FROM persons WHERE TRIM(REPLACE(name, 'Ä', 'Ae')) = :name;

+0

あなたの答えをありがとう。私はそれを見てみましょう。 – David