execute_query 和 prepare+execute 有什么区别?

What is the difference between execute_query and prepare+execute?

提问人:Bebo 提问时间:9/15/2023 最后编辑:DharmanBebo 更新时间:9/15/2023 访问量:58

问:

使用 [1] 或使用 then [2] 有什么区别,我们什么时候使用 bind 参数,为什么?就像在示例 [2] 中一样,我们已经在 execute 中给出了变量,那么 bind 参数什么时候更有用呢?execute_query()prepare()execute()

[1]

$stmt = $db->execute_query($Update, [$Date, $Email]);

[2]

$stmt = $db->prepare("INSERT INTO Users (Username, Email, Password, Creation_Date, VIP, Admin) VALUES (?,?,?,?,?,?)");
$stmt->execute([
    $Username, 
    $Email,
    $Password,
    $Creation_date,
    $VIP,
    $Admin,
]);
PHP MySQLI

评论


答:

4赞 Barmar 9/15/2023 #1

execute_query()只是一个快捷方式,允许您将 、 、 和 合并到一个调用中。prepare()bind_param()execute()get_result()

由于您没有对象,因此有关查询的状态信息将放入该对象中。例如,不要使用 .mysqli_stmt$db$stmt->affected_rows$db->affected_rows

2赞 Dharman 9/15/2023 #2

execute_query()是其中最简单的。它准备并执行查询,并返回一个对象或布尔值。如果您只想执行一个简单的查询并获取结果,则可以使用它。mysqli_result

prepare()返回一个对象,您可以在自己方便的时候执行该对象。它比以前的选项更强大。例如,当在具有不同值的循环中执行相同的预准备语句时,它很有用。mysqli_stmt

您可以将所有参数作为数组传递给 或 ,但如果想要更高的健壮性,可以使用 来引用语句对象来绑定变量。它的用途不多,但如果你需要它,它就在那里。它也是 PHP 8.1 之前唯一可用的选项。execute()execute_query()bind_param()