2012-05-12 128 views
0

我在過去的幾天中圍繞一個問題回顧我的問題,並且需要一些關於如何解決問題的提示。SQL查詢+特殊字符ä,ö,ü,ø等

我有一個SQL查詢,看起來像這樣

mysql_real_escape_string($value); 
    $sql_first = "SELECT `user_id` FROM `usermeta` WHERE `meta_value` = '".$value."' 


如果$值不包含像ä ü ö ø

字符數據庫的排序規則,它工作正常進行utf8_general_ci

我嘗試了各種與php conv()函數的組合,但無法使其正常工作。

我想我必須將$value轉換爲UTF-8 - 這是正確的方向嗎?

+0

即使沒有特殊字符也行不通:想象一下這個'$ value':''Robert'; drop table usermeta; - 「'。 **不要嘗試它,只要想象會發生什麼。**這是[Bobby Tables](http://xkcd.com/327/)示例,通常稱爲SQL Interjection攻擊。 – dasblinkenlight

+0

SQL *感嘆詞*攻擊:* Oh shit!* :-) –

+0

您應該用'sql-injection'標記您的問題。這樣我們也會知道你在使用PHP。 –

回答

1

使用準備好的語句,數據庫驅動程序將爲您做所有事情,並且您不會受到SQL注入攻擊作爲獎勵。

http://php.net/manual/fr/mysqli.prepare.php

+0

它仍然沒有工作,這是你將如何使用綁定功能? '$ stmt-> bind_param(「s」,$ value);' – Backslash

0

我要說嘗試utf8_unicode_ci整理

this鏈接:

  1. utf8_unicode_ci支持所謂的擴張和連筆字,例如:

    的主要區別: 德文字母ß(U + 00DF LETTER SHARP S)排序靠近「ss」 字母Œ(U + 0152拉丁大寫字母OE)在「OE」附近排序。

utf8_general_ci不支持擴展/連字,它將所有這些字母排序爲單個字符,有時按錯誤順序排序。

  1. utf8_unicode_ci是一般所有腳本更準確。 例如,在西里爾語塊上: utf8_unicode_ci適用於所有這些語言: 俄語,保加利亞語,白俄羅斯語,馬其頓語,塞爾維亞語和烏克蘭語。 雖然utf8_general_ci只適用於俄羅斯和保加利亞的西里爾語子集。 用於白俄羅斯語,馬其頓語,塞爾維亞語和烏克蘭語 的額外字母排序順序不正確。

utf8_unicode_ci的缺點是它比utf8_general_ci慢了一點點 。

所以,當你需要更好的排序順序 - 使用utf8_unicode_ci, ,當你完全對性能感興趣 - 使用utf8_general_ci。

相關問題