php
  • mysql
  • quotes
  • 2014-10-30 13 views 1 likes 
    1

    奇怪的是,我將一個站點和數據庫從一臺LAMP服務器移動到另一臺服務器。在舊服務器上,用戶可以將文本輸入到包含沒有問題的引號的文本區域中。我假設它要麼在PHP或SQL配置文件,麻煩的是,我的舊站點上的主機不會提供這些文件,所以我不知道該怎麼改變。任何想法爲什麼它在一個而不是另一個上工作?SQL在一臺服務器上引用產生的sql語法錯誤,而不是另一個

    這裏的代碼行,以防萬一:

    mysql_query("UPDATE Stu SET Stu_IDD = '$snumd', First = '$first', Last = '$last', 
          MPhone = '$mphone', HPhone = '$hphone', EContact = '$econtact', 
          EPhone = '$ephone', GMail = '$gmail', PMail = '$pmail', 
          Address = '$address', Apt = '$apt', Pcode = '$pcode', 
          City = '$city', DOB = '$dob', Gender = '$gender', 
          Deaf = '$deaf', Notes = '$notes' 
          WHERE Stu_ID = '$snum'") 
         or die(mysql_error()); 
    

    在此先感謝這麼多的時間和回覆!

    +2

    1)什麼是語法錯誤的文本? 2)你可能想要參數化這個查詢,因爲你可能會打開一個SQL注入攻擊。 – 2014-10-30 21:12:33

    回答

    -1

    在新版本的mysql中,查詢命令使用mysqli而不是mysql ...嘗試改爲使用mysqli_query。如果這不起作用,請確保數據庫的名稱和查詢中的名稱匹配。

    1

    在舊服務器上,用戶可以將文本輸入到文本區域,其中包括 引用沒有問題。

    看起來您的報價在舊服務器上自動轉義,可能是因爲在舊版本的php中設置了Magic Quotes

    此「功能」已被棄用和刪除,因此不應依賴轉義數據庫的數據。

    您應該切換到PDO或mysqli並使用帶有綁定參數的預準備語句。

    0

    無論如何,您可能不希望在數據庫中允許未轉義的引號。使用mysqli_real_escape_string逃避這些字符:\x00, \n, \r, \, ', ", \x1a

    http://php.net/manual/en/mysqli.real-escape-string.php

    相關問題