先說一下事情發生的原因。
我的同事跟我說,有一篇新聞稿死活發布不了,一發布就提示錯誤,於是丟到我這裡來了。
我一開始是認為可能之前開發的人資料庫欄位類型的坑,可能長度不夠,因為這篇新聞稿確實是挺長的。然後我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 正解