【发布时间】:2014-01-21 02:29:22
【问题描述】:
我想这不是特别“适合我们的问答形式”,但不知道在哪里可以问它。
为什么 SQL 查询是基于 text 的?是有历史动机,还是只是懒惰?
mysqli_query("SELECT * FROM users WHERE Name=$name");
它会引发大量类似上述的愚蠢错误,鼓励 SQL 注入。对于 SQL,它基本上是 exec,而 exec'ing 代码,尤其是动态生成的,被广泛劝阻。
另外,老实说,准备好的语句似乎只是一种冗长的解决方法。
为什么我们不采用一种更面向对象、不可注入的方式来做这件事,比如拥有一个具有某些方法的可直接访问的数据库对象:
$DB->setDB("mysite");
$table='users';
$col='username';
$DB->selectWhereEquals($table,$col,$name);
数据库本身本机实现的,完全消除了与exec的所有相似之处,并使SQL注入的整个基础无效。
在真正的问题上达到高潮,是否有任何数据库框架可以做这样的事情?
【问题讨论】:
-
从历史上看,所有的语言都是基于文本的......现在你可以设计其他方法,但在那个时候这是唯一可行的选择。
-
“是否有任何数据库框架可以做这样的事情” - 是的。有很多。
标签: sql exec sql-injection object-oriented-database