2012-08-04 138 views
-2

可能重複:
How to properly escape a string via PHP and mysql如何在PHP中轉義字符串?

我試圖填充MySQL數據庫,這樣做我解析數據文件和運行INSERT INTO ...查詢。

+-------------+---------+------+-----+---------+----------------+ 
| Field  | Type | Null | Key | Default | Extra   | 
+-------------+---------+------+-----+---------+----------------+ 
| id   | int(11) | NO | PRI | NULL | auto_increment | 
| drug_a  | blob | NO |  | NULL |    | 
| drug_b  | blob | NO |  | NULL |    | 
| correlation | float | NO |  | NULL |    | 
| p_value  | float | NO |  | NULL |    | 
+-------------+---------+------+-----+---------+----------------+ 

然而,也有一些drug_x值沿着有',所以我怎麼能逃過我的字符串在其他忽略或刪除從字符串的':作爲 表parsonspredictions_R的結構?

實例:

INSERT INTO parsonspredictions_R (
    drug_a, 
    drug_b, 
    correlation, 
    p_value 
) VALUES(
    '2'-Hydroxyflavanone_28_0', 
    'Emodin', 
    0.165714, 
    0.0019 
); 

結果:

查詢無效:您的SQL語法錯誤;檢查對應於你的MySQL服務器版本使用附近的「正確的語法手冊」,「大黃素」,0.165714,0.0019)」在行1-B

+0

你正在使用什麼數據庫庫? – 2012-08-04 21:56:06

+0

有一個mysql標記 – Cups 2012-08-04 21:57:47

+2

@Cups不是什麼*數據庫*,而是什麼*庫*來訪問該數據庫。單獨的核心PHP有3個:舊的mysql,較新的mysqli和PDO。 – 2012-08-04 21:58:30

回答

0

你可以逃脫「字符數限制通過鍵入

INSERT INTO parsonspredictions_R (
    drug_a, 
    drug_b, 
    correlation, 
    p_value 
) VALUES(
    '2''-Hydroxyflavanone_28_0', 
    'Emodin', 
    0.165714, 
    0.0019 
); 

或者你可以把你的字符串在MySQL查詢中 「」 -quotes。

編輯: 爲了讓你的文件準備好正則表達式,你可以在使用正則表達式之前在文本上使用mysql_real_escape_string()。它會逃離所有可疑的人物,如'人物。

+0

+1,因爲這是正確的,不值得讚賞。但是,由於該問題被標記爲PHP,因此可以考慮如何插入「動態數據」。 – 2012-08-04 22:06:31

+0

@Ianka:數據來自一個正在使用正則表達式進行分析的文件,所以我不能手動轉義它。 – cybertextron 2012-08-04 22:08:15

+0

@philippe你可以編輯你的正則表達式(或者創建另一個)在文本變量中添加''(2個引號)而不是'(單引號) – user15 2012-08-04 22:11:37

1

嘗試使用此功能mysqli_real_escape_string如果您使用的mysqli ,如果你不使用mysqli,那麼簡單的谷歌搜索:escapes special characters in a string PHP會指向你的解決方案。

如果你想避免這個問題完全,你應該嘗試使用PDO class和自己拿上準備好的語句。

假設你正在使用的mysqli

$drug_a = mysqli_real_escape_string($drug_a); 
$drug_b = mysqli_real_escape_string($drug_b); 


INSERT INTO parsonspredictions_R (
    drug_a, 
    drug_b, 
    correlation, 
    p_value 
) VALUES(
    $drug_a, 
    $drug_b, 
    0.165714, 
    0.0019 
); 
+0

'MySQL'何塞維加! – cybertextron 2012-08-04 21:58:24

+0

@philippe然後*指定您正在使用的數據庫庫* – 2012-08-04 21:59:01

+3

@philippe - 'mysqli'是'mysql'本機庫的PHP *更新*版本。它*是* MySQL。 – 2012-08-04 21:59:22