在MySQLi,PDO或PHP中是否存在使用参数化查询但未准备稍后调用的API?我在ADO.NET中找到它时,我们不调用SQLParameter的.Prepare()方法,但我没有在PHP中找到它。没有在PHP中准备语句的参数化查询
2
A
回答
0
准备好的语句被发送到数据库服务器,其值与查询分离。如果你想让ID 1337的用户使用PDO,你可以这样做;
$sql = 'SELECT u.id, u.username FROM users u WHERE u.id = :theUserIdToGet LIMIT 1';
$stmt = $db->prepare($sql);
$stmt->bindValue(':theUserIdToGet', 1337);
$result = $stmt->fetch();
在传统的查询中,这只是;
$sql = 'SELECT u.id, u.username FROM users u WHERE u.id = ' . 1337 . ' LIMIT 1';
$stmt = $db->query($sql);
$result = $stmt->fetch();
第一个例子显然需要更多的代码,但它有以下好处;
- 安全性 - 值(仅在此例中为1337)分别发送到数据库服务器。数据库服务器安全地检查这些值是否有错误字符,并在执行前将它们插入到查询中。请注意,一些查询API将模拟此,但它仍然提供了很大的安全性。
- 可读性 - 向查询中添加多个参数时,如果连接字符串(“WHERE id =”。$ var1。“AND”。$ var2。“= 1”等)会变得非常混乱。
- 表现(偶尔) - 准备好的陈述在执行很多次时会快得多,但在实践中这是非常罕见的。通过query()准备查询的性能开销可以忽略不计。
由于可读性和安全性,在将变量插入查询时应始终使用已准备好的语句。
PDO通常被认为非常好,我个人一直都在使用它。它的学习曲线很温和,许多教程都可以在网上找到。它的文档是here
+1
请再读一遍我的问题 – ahoo 2011-04-30 11:47:44
相关问题
- 1. 如何在opencart中使用参数化查询/准备语句?
- 2. SQL准备语句中的参数化查询
- 3. 没有准备好的语句或参数化查询的SQL注入
- 4. PHP准备的语句没有准备第二条语句
- 5. 优化准备语句查询
- 6. PHP PDO准备语句 - MySQL LIKE查询
- 7. 准备好的语句参数没有在DataNucleus中设置
- 8. PHP在准备好的语句中准备了语句
- 9. 查询与Android中的准备语句?
- 10. PDO准备语句参数
- 11. 没有提供准备好的语句中的参数的数据MySQLi PHP
- 12. 在参数中准备语句?
- 13. PHP检查在if语句中准备好的语句
- 14. 准备语句查询语法错误
- 15. Java为oracle alter session查询准备的语句参数
- 16. PHP准备语句
- 17. 没有准备好的语句查询结果
- 18. 在PHP MVC准备语句
- 19. 如何在准备好的语句中有两个sql查询?
- 20. mysql准备了语句参数和订购查询
- 21. 春季地图可选查询参数到SQL准备语句
- 22. 如何在php中准备语句中绑定参数?
- 23. Zend_Db:准备好的语句没有处理参数
- 24. 如何在查询中使用准备好的语句与IN子句中PHP
- 25. PHP MySQL准备语句准备()失败
- 26. Java交叉表 - 准备语句查询
- 27. Mysql查询Mysql和准备语句
- 28. EclipseLink JPA2条件查询准备语句
- 29. 查询清单,准备语句(JDBC)
- 30. php mysqli绑定参数:在准备好的语句中没有为参数提供的数据
你想要什么或要求功能明智。 ?如果你不想准备一个声明只是使用mysqli->查询 – 2011-04-30 10:14:04
我也不明白你的要求,为什么你不准备声明并执行它? – markus 2011-04-30 10:35:16
@molvi。准备好的语句是多次执行查询的实用程序。认为我想执行一次查询。所以我不想为数据库准备不必要的开销。如在内存中缓存查询计划 – ahoo 2011-04-30 10:35:19