php的pdo中對雙引號做了什麼處理麼,為什麼這個語句可以執行通過

來源:互聯網
上載者:User
找了個輕量級的資料庫類 medoo,感覺不錯,但是使用時發現了一個很奇怪的問題
在使用mysql的時候他組裝的sql表名、欄位名都是用雙引號的,這樣產生的語句不能直接執行
mysql> SELECT * FROM "dd_xq_user_info" WHERE "uid" = '1' AND "status" = '1' ORDER BY "id" LIMIT 1;ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"dd_xq_user_info" WHERE "uid" = '1' AND "status" = '1' ORDER BY "id" LIMIT 1' at line 1

但是用pdo執行這個語句執行成功了,而且沒有錯誤,請問大家這個是為什麼呢?pdo做了什麼處理?


回複討論(解決方案)

這是不可能的!
貼出你的真實代碼

剛才通讀了下medoo的代碼 https://github.com/catfan/Medoo/blob/master/medoo.php
發現在串連資料庫的時候執行一個語句
SET SQL_MODE=ANSI_QUOTES
發現這個模式的作用就是把雙引號改為反引號

ANSI_QUOTES將‘”’視為識別符引號(‘`’引號字元),不要視為字串的引號字元。在ANSI模式,你可以仍然使用‘`’來引用識別符。啟用ANSI_QUOTES後,你不能用雙引號來引用字串,因為它被解釋為識別符。

這解釋了為什麼上面的語句可以執行
暫時想不到會不會有帶來其他的問題

SQL_MODE 的預設值是 STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
改成 ANSI_QUOTES 後,如果沒有其他的操作,自然是不會有影響的

這是 MySQL 的功能,並非 PDO 的

這是 MySQL 的功能,並非 PDO 的


是啊 我還以為pdo有這個功能
順便祝端午安康,多謝過節還幫忙答疑解惑
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.