php
  • mysql
  • 2014-09-26 83 views 2 likes 
    2

    這是正確的方式來逃脫一個字符串,以防萬一,或者我可以插入像這樣的字符串沒有額外的逃脫?更換引號後正確地轉義字符串的方法?

    $filenamefordb = preg_replace('/[^A-Za-z0-9а-яА-Я_\.\-]/u', '', $filenamefordb); 
    $query = "INSERT INTO file SET filename='$filenamefordb"; 
    

    我沒有在另一個地方使用mysqli_escape,因爲我還需要名字不帶任何引號

    +1

    爲什麼不使用你的MySQL API提供的逃逸功能?然後你就會知道它是正確的... – 2014-09-26 13:08:32

    +0

    ,因爲我需要的文件名沒有任何其他符號 – x1site 2014-09-26 13:29:20

    +0

    隨機刪除一堆字符有什麼好處呢?難道你不是隻是可能會破壞可能的輸入文件名嗎?爲什麼? – 2014-09-26 13:44:31

    回答

    1

    你爲什麼不使用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' 
    

    參考: http://php.net/manual/it/pdo.quote.php

    +0

    ,因爲我還需要沒有quetes的字符串,只是a-z和數字(我需要它用於另一個地方) – x1site 2014-09-26 13:52:58

    0

    你可以用一個通用的PHP函數逃避它:

    $filenamefordb = mysql_escape_string ($filenamefordb); 
    $query = "INSERT INTO file SET filename='$filenamefordb"; 
    
    +1

    注意:'mysql_'已被棄用。 – 2014-09-26 13:14:04

    +1

    我知道mysqli_escape,但我也需要一個沒有任何特殊符號的名字 – x1site 2014-09-26 13:31:21

    +0

    @ x1site:你需要考慮名字來自哪裏,爲什麼它有「特殊符號」,爲什麼你不想要他們。你可能應該在你的調用堆棧中進一步拒絕它們。 – 2014-09-26 13:45:07

    相關問題