ホームページ >バックエンド開発 >PHPチュートリアル >PDO の pdo に二重引用符に対する処理が行われているのですが、なぜこのステートメントが実行できるのでしょうか?

PDO の pdo に二重引用符に対する処理が行われているのですが、なぜこのステートメントが実行できるのでしょうか?

WBOY
WBOYオリジナル
2016-06-23 13:32:191202ブラウズ

軽量のデータベースクラス medoo を見つけました。これは良い感じですが、使用中に非常に奇妙な問題を発見しました。
mysql を使用すると、彼が組み立てた SQL テーブル名とフィールド名はすべて二重引用符で囲まれて生成されます ステートメントを直接実行することはできません。
うわー
しかし、PDO を使用してステートメントを正常に実行すると、エラーは発生しません。これはなぜでしょうか? pdoはどのような処理を行ったのでしょうか?


ディスカッションへの返信(解決策)

これは不可能です!
実際のコードを投稿してください

medoo コードを読んだところです https://github.com/catfan/Medoo/blob/master/medoo.php
データベースに接続するときにステートメントが実行されることがわかりました
SET SQL_MODE= ANSI_QUOTES
このモードの機能は二重引用符を逆引用符に変更することであることがわかりました

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

これで上記のステートメントが実行できる理由が説明されています
それが他の問題を引き起こすかどうかは当面考えられません

SQL_MODE のデフォルト値は STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION です
ANSI_QUOTES に変更した後、他に操作がなければ当然影響はありません

これは PDO ではなく MySQL の関数です

これは関数ですPDO ではなく、MySQL です


そうですね、PDO にこの機能があると思いました
ところで、端午節が幸せになることを祈っています フェスティバル中に質問に答えてくれてありがとう🎜
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。