mysql插入新內容時有奇怪的錯誤?

來源:互聯網
上載者:User
關鍵字 php mysql 字元 字串處理
先說一下事情發生的原因。
我的同事跟我說,有一篇新聞稿死活發布不了,一發布就提示錯誤,於是丟到我這裡來了。
我一開始是認為可能之前開發的人資料庫欄位類型的坑,可能長度不夠,因為這篇新聞稿確實是挺長的。然後我describe了一下,發現欄位類型是text。以防萬一,我還是拿那篇新聞稿去做個字元統計,結果完全是text長度以內的。當然,我黏貼的時候小心地選擇了純文字黏貼,避免奇怪的東西混入。
好吧,然後我試著將mysql_error輸出。

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 's up》由xxx演唱,帶動了' at line 1

我翻了一下原文,發現了這個句子:
一首活潑輕快的《What's up》由xxx演唱,帶動了現場氛圍。在xxx帶來的一曲風格迥異的《美麗的笨女人》後,第一輪競演順利結束。

所以即使到了這裡,我也不知道這到底是鬧哪只鬼。
於是我試著只輸入《What's up》,試著發布一下。果不其然,又出錯了。

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 's up》

然後我發現,這個what`s中的那個小點點,不是反引號,而是單引號。

這是反引號 `

這是單引號 '

只歪了一丟丟咯朋友。
難道這是辣雞編輯器的問題?單引號沒有閉合?
然後我試著輸入's'
發布
然後

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 's'

為什麼呢?
編輯器??
於是我看了一下編輯器的html視圖

's'

正常得連個html標籤都沒有。
然後我只好把'改為`。英文縮寫好像就是反引號的吧。但是辣雞編輯器並沒有進階到這種水平啊。
所以,我到了這裡來求助。
不要吐槽標題,因為我真的不知道這是什麼狗屁問題。

回複內容:

先說一下事情發生的原因。
我的同事跟我說,有一篇新聞稿死活發布不了,一發布就提示錯誤,於是丟到我這裡來了。
我一開始是認為可能之前開發的人資料庫欄位類型的坑,可能長度不夠,因為這篇新聞稿確實是挺長的。然後我describe了一下,發現欄位類型是text。以防萬一,我還是拿那篇新聞稿去做個字元統計,結果完全是text長度以內的。當然,我黏貼的時候小心地選擇了純文字黏貼,避免奇怪的東西混入。
好吧,然後我試著將mysql_error輸出。

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 's up》由xxx演唱,帶動了' at line 1

我翻了一下原文,發現了這個句子:
一首活潑輕快的《What's up》由xxx演唱,帶動了現場氛圍。在xxx帶來的一曲風格迥異的《美麗的笨女人》後,第一輪競演順利結束。

所以即使到了這裡,我也不知道這到底是鬧哪只鬼。
於是我試著只輸入《What's up》,試著發布一下。果不其然,又出錯了。

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 's up》

然後我發現,這個what`s中的那個小點點,不是反引號,而是單引號。

這是反引號 `

這是單引號 '

只歪了一丟丟咯朋友。
難道這是辣雞編輯器的問題?單引號沒有閉合?
然後我試著輸入's'
發布
然後

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 's'

為什麼呢?
編輯器??
於是我看了一下編輯器的html視圖

's'

正常得連個html標籤都沒有。
然後我只好把'改為`。英文縮寫好像就是反引號的吧。但是辣雞編輯器並沒有進階到這種水平啊。
所以,我到了這裡來求助。
不要吐槽標題,因為我真的不知道這是什麼狗屁問題。

很好,發現了就好,這就是傳說中的sql注入!所以建議你仔細看看PDO的文檔,用安全的方式插入資料,如

$pdo->query('insert into table set field1 = ?, field2 = ?, field3 = ?', array('param1', 'param2', 'param3'));

這樣PDO會幫你把那個討厭的單引號自動轉義的。

你把單引號轉義後,在執行插入操作,看還報錯嗎?就是單引號前面加個反斜線

資料庫連接方式用PDO或者插入前對變數htmlspecialchars

用mysql的話試試 mysql_real_escape_string(可選addslashes)
注意檢查 get_magic_quotes_gpc
文檔有例子

樓上的正解!

@incNick 正解

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.