2016-05-23 126 views
1

我编码了这两个代码块,但他们似乎也是这样做的。我不明白你什么时候应该使用其中的每一个。这两个代码有什么区别

$query= $db->query("SELECT * FROM forum_table WHERE forum_id = '$id'"); 

$sql="SELECT * FROM forum_table WHERE forum_id = '$id'"; 
if ($query = $db->prepare($sql)) 
$query->execute(); 

我不明白如何将这些不同

+6

其中一种说法是拼命试图成为准备好的荣耀的灯塔,但在最后的障碍失败了:( – Dale

+0

第一个是真正有用的,当你只有一条备用线 –

回答

-1

一开始这两个声明的是完全一样的所以从字面上没有什么区别。

有一个提示与第二个块非常不同的事情。

prepared statements

至于何时使用了另一种..总是用准备好的发言

0

好,在

$query= $db->query("SELECT * FROM forum_table WHERE forum_id = '$id'"); 

情况下,这是非常简单,大家都知道,简单一个直接执行的查询,没有额外的魔法。

$sql="SELECT * FROM forum_table WHERE forum_id = '$id'"; 
if ($query = $db->prepare($sql)) 
$query->execute(); 

虽然在第二件的代码,你已经使用了相同的查询,但你必须在执行(你不是在做正确的方式前准备查询,那是你不会离开的占位符参数绑定它是使用预准备语句的推荐和有意义的方式), 通过在预准备语句中为绑定参数创建占位符,稍后准备在实际执行查询之前准备一个模板,这在许多方面都有所帮助。 准备语句减少了解析时间,因为查询的准备工作只进行一次(尽管该语句多次执行)。 注意:最好的做法是将参数绑定到准备语句中,以便如果查询必须运行多个不同参数的时间。仅限 绑定参数使服务器的带宽最小,因为您每次只需发送参数;不是整个查询。 最后但并非最不重要的是,如果参数绑定到SQL注入,Prepared语句对于SQL注入非常有用。

+0

_准备语句是非常有用的反对SQL injection._但不是查询你不用在哪里不要查询你在哪里不要使用参数化的查询!!!! – RiggsFolly

+0

是的,你是对的我在那里写了使用Prepared语句的参数化查询,否则在第二个代码示例中prepare语句还没有制作模板对于当时的查询(这是没有价值没有参数),但仍逻辑上说,查询已准备在那里,如果任何人想通过执行“执行”以后执行查询 (这是什么prepare()做或没有绑定参数。) –