我正在使用PDO和MySQL数据库处理应用程序。
我看到了一些查询,这些只是非常简单的SELECT
语句,例如
SELECT * FROM table ORDER BY name ASC
代码不使用prepare
,例如:
$sql = "SELECT * FROM " . $this->table . " ORDER BY name ASC";
$stmt = $this->db->query($sql);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $results;
如果查询中没有占位符,是否可以执行此操作,即不使用prepare?
我之所以这么说是因为根据它所说的documentation
SQL语句可以包含零或更多名称(:name)或问号(?)参数标记
让我想知道你为什么在没有(零)参数标记的情况下使用它?
答案 0 :(得分:1)
当然,如果您的查询中没有动态数据,则可以省略prepare
。
但是,准备好的陈述比仅保护您的查询更具优势。
根据http://php.net/manual/en/pdo.prepared-statements.php,第二个优点是,语句可以准备一次并执行多次。
查询只需要解析(或准备)一次,但可以使用相同或不同的参数执行多次。准备好查询后,数据库将分析,编译和优化其执行查询的计划。对于复杂查询,如果需要使用不同的参数多次重复相同的查询,则此过程可能会占用足够的时间,从而显着减慢应用程序的速度。通过使用预准备语句,应用程序避免重复分析/编译/优化循环。这意味着预准备语句使用的资源更少,因此运行速度更快。
然而,如果您只运行一次查询并且查询中没有动态数据,则省略prepare
也没关系。
答案 1 :(得分:1)
是的,因为准备好的陈述的使用有两个主要原因:
由于您没有可以由预准备语句处理的参数(表名不能是参数),因此您不会通过将查询推送为预准备语句来获得任何内容。
您仍然需要确保Notification permission granted.
返回的内容不会导致生成的sql代码出现任何问题。
答案 2 :(得分:0)
实际上,你必须极少运行这样的查询。一些具有类似配置选项的表可能是。
在所有其他情况下,至少LIMIT条款是强制性的。
所以问题是理论问题。