2011-04-30 59 views
2

在MySQLi,PDO或PHP中是否存在使用参数化查询但未准备稍后调用的API?我在ADO.NET中找到它时,我们不调用SQLParameter的.Prepare()方法,但我没有在PHP中找到它。没有在PHP中准备语句的参数化查询

+0

你想要什么或要求功能明智。 ?如果你不想准备一个声明只是使用mysqli->查询 – 2011-04-30 10:14:04

+0

我也不明白你的要求,为什么你不准备声明并执行它? – markus 2011-04-30 10:35:16

+0

@molvi。准备好的语句是多次执行查询的实用程序。认为我想执行一次查询。所以我不想为数据库准备不必要的开销。如在内存中缓存查询计划 – ahoo 2011-04-30 10:35:19

回答

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