這是正確的方式來逃脫一個字符串,以防萬一,或者我可以插入像這樣的字符串沒有額外的逃脫?更換引號後正確地轉義字符串的方法?
$filenamefordb = preg_replace('/[^A-Za-z0-9а-яА-Я_\.\-]/u', '', $filenamefordb);
$query = "INSERT INTO file SET filename='$filenamefordb";
我沒有在另一個地方使用mysqli_escape,因爲我還需要名字不帶任何引號
php
這是正確的方式來逃脫一個字符串,以防萬一,或者我可以插入像這樣的字符串沒有額外的逃脫?更換引號後正確地轉義字符串的方法?
$filenamefordb = preg_replace('/[^A-Za-z0-9а-яА-Я_\.\-]/u', '', $filenamefordb);
$query = "INSERT INTO file SET filename='$filenamefordb";
我沒有在另一個地方使用mysqli_escape,因爲我還需要名字不帶任何引號
你爲什麼不使用PDO轉義字符串?
<?php
$conn = new PDO('sqlite:/home/lynn/music.sql3');
/* Complex string */
$string = "Co'mpl''ex \"st'\"ring";
print "Unquoted string: $string\n";
print "Quoted string: " . $conn->quote($string) . "\n";
?>
這將輸出
Unquoted string: Co'mpl''ex "st'"ring
Quoted string: 'Co''mpl''''ex "st''"ring'
,因爲我還需要沒有quetes的字符串,只是a-z和數字(我需要它用於另一個地方) – x1site 2014-09-26 13:52:58
你可以用一個通用的PHP函數逃避它:
$filenamefordb = mysql_escape_string ($filenamefordb);
$query = "INSERT INTO file SET filename='$filenamefordb";
注意:'mysql_'已被棄用。 – 2014-09-26 13:14:04
我知道mysqli_escape,但我也需要一個沒有任何特殊符號的名字 – x1site 2014-09-26 13:31:21
@ x1site:你需要考慮名字來自哪裏,爲什麼它有「特殊符號」,爲什麼你不想要他們。你可能應該在你的調用堆棧中進一步拒絕它們。 – 2014-09-26 13:45:07
爲什麼不使用你的MySQL API提供的逃逸功能?然後你就會知道它是正確的... – 2014-09-26 13:08:32
,因爲我需要的文件名沒有任何其他符號 – x1site 2014-09-26 13:29:20
隨機刪除一堆字符有什麼好處呢?難道你不是隻是可能會破壞可能的輸入文件名嗎?爲什麼? – 2014-09-26 13:44:31