三种选择是相同的(Y/N)还是更好的(A/B/C)?
选项A - (1)在变量$sql中定义$sql字符串,(2)使用变量$sql上的“方法”prepare定义语句句柄,以组成语句;(3)使用execute函数在步骤2中激活语句的组合。
$sql = "SELECT * FROM table1";
$sth = $dbh->prepare($sql);
$sth->execute();选项B -类似于选项C,因为->query方法直接用于db对象,与选项A类似,因为->query语句是分开的。
$sql = "SELECT * FROM table1";
$sth = $dbh->query($sql);选项C -语句句柄是sql本身(不引用任何其他变量,只使用一种方法)。
$sth = $dbh->query("SELECT * FROM table1");问题:
->query()方法?发布于 2012-12-28 01:48:11
我认为这两种方法在使用字符串变量或直接文本字符串时是相同的。
假设您使用PDO,准备语句和调用查询语句之间有区别。
在A种情况下,prepare语句将使数据库创建一个计划,这样语句就可以被重新执行,而无需对查询字符串进行重新分析。
在B种情况下,查询将立即执行。
在您给定的示例中,B会运行得更快一些。但是,如果您的语句使用参数,案例A将为您带来额外的安全性,因为占位符被驱动程序替换了。
发布于 2012-12-28 01:55:47
这两个选项会产生相同的结果吗?
是。
如果它们产生相同的结果,是否建议采用一种方法(即最佳做法)?
两人都很好。在您的特定示例中,选项B可以用较少的代码完成相同的任务。
但是,如果您需要在查询中使用参数和/或约束(例如,...WHERE id = :id),则需要在准备语句之后选择选项A来使用$dbh->bindParam(':id‘、$id、PDO::PARAM_INT)方法绑定params,例如:
$dbh->prepare('UPDATE table SET column = :value WHERE id = :id');
$dbh->bindParam(':value', $someNewValue, PDO::PARAM_STR);
$dbh->bindParam(':id', $targetId, PDO::PARAM_INT);
$dbh->execute();这样做还可以保护您免受SQL注入之类的讨厌的事情的影响。
只有当您计划稍后在代码中重用该查询时,才需要将查询存储在单独的变量中。否则,您最好直接在准备/查询方法中键入它。
“变量”、“方法”和“函数”这样的词汇正确吗?
看上去是对的!除了:“execute函数”是一个方法。函数和方法基本上是相同的,除非它们属于一个对象,它们被称为方法。在您的示例中,execute属于$sth对象,因此称为方法。
选项A仍然查询db,尽管没有显式地使用->query()方法吗?
是。execute方法执行$dbh->prepare(.)中准备的查询。如果要使用参数,可以在准备方法和执行方法之间调用->bindParam()。如果不需要参数,那么直接调用->query()确实是更方便的方法。
https://stackoverflow.com/questions/14063527
复制相似问题