2017-02-09 36 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

你將不得不首先獨立清理數據庫。因此,當您執行INSERTUPDATE時,您將在name字段上運行url_replace。然後,當您在問題中運行檢查時,可以針對您檢查的值運行url_replace

換句話說,你需要使表格中的數據統一起來,以便統一出來。

+0

哦,你想在數據庫上運行PHP函數 – Machavity

+0

我已經更新了我的答案。根據您的建議,無法在每個查詢的基礎上針對整個表運行PHP函數。你需要通過你的函數分別清洗表格,並逐行更新。 – Machavity

+0

感謝您更新答案,但這不是我正在尋找的。更新所有行不會有問題,(幾分鐘內完成)。但這不是我想要的。 – David

0

可以做你想做的事,但它是高度不推薦,否則你會有這種方法嚴重的性能問題。

最好的方法是在將名稱保存到數據庫之前清理名稱。

如果你真的需要做到這一點,比你應該使用REPLACE功能鏈接了很多次,然後用TRIM功能...

實例查詢:

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

+0

感謝您的回答。我會看看它。 – David