使用 MySQLi 在 PHP 中使用多个准备好的语句

问题描述 投票:0回答:3

我想用 PHP 和 MySQLi 制作两条准备好的语句,一条紧接另一条。我是 PHP 和 MySQLi 的新手,所以我不知道是否应该关闭语句、关闭数据库连接、将所有代码放在函数中,或者只是将代码放在函数中。

基本上,我只想将一条记录插入到一个表中,然后使用 MySQLi 将相同的记录插入到另一个表中。

php mysqli prepared-statement
3个回答
12
投票

直接关闭 mysqli 页面:http://php.net/manual/en/mysqli.commit.php

<?PHP
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$mysqli->set_charset('utf8mb4');

/* set autocommit to off */
$mysqli->autocommit(FALSE);

/* Insert some values */
$mysqli->query("INSERT INTO table1 VALUES ('DEU', 'Bavarian', 'F', 11.2)");
$mysqli->query("INSERT INTO table2 VALUES ('DEU', 'Bavarian', 'F', 11.2)");

/* commit transaction */
$mysqli->commit();

/* close connection */
$mysqli->close();

*使用“不理智”行动的准备语句进行编辑:

<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "root", "", "");
$mysqli->set_charset('utf8mb4');

/* set autocommit to off */
$mysqli->autocommit(FALSE);

$stmt1 = $mysqli->prepare("INSERT INTO tbl1 (id, intro) VALUES (?, ?)");
$stmt2 = $mysqli->prepare("INSERT INTO tbl2 (id, name) VALUES (?, ?)");

$str1 = 'abc';
$str2 = 'efg';
$str3 = 'hij';
$str4 = 'klm';

$stmt1->bind_param('ss', $str1, $str2);
$stmt2->bind_param('ss', $str3,$str4);

$stmt1->execute();
$stmt2->execute();

/* commit and set autocommit to on */
$mysqli->autocommit(true);

0
投票

我是否应该关闭声明

没有。

关闭数据库连接

没有。

将所有代码放入一个函数中

最好,如果您知道什么是函数以及如何使用它们。

顺便说一句,插入相同的数据两次是没有意义的。你必须链接数据,而不是双重数据。


0
投票

这里有几个不同的问题,我可以尝试回答所有剩下的问题。 RumpRanger 的答案以及 Dharman 的编辑显示了如何执行准备好的语句的详细信息。

您希望在执行所有查询时保持数据库连接打开。您很少想要或需要关闭连接;当脚本执行完成时它将自动关闭。当我用 PHP 编写代码时,我仅在需要连接后会发生复杂事情的脚本中关闭连接。然而,随着时间的推移,即使是这种类型的使用也变得越来越没有好处,因为较新版本的 PHP 具有内置优化功能,如果发现某些变量稍后在脚本中不使用,则会自动清理它们,并且会破坏与 MySQL 关联的对象连接会自动关闭连接。

是否将代码放入函数中取决于您是否打算概括或抽象您在查询中所做的事情。如果您预计需要从代码中的多个位置多次执行相同的查询但使用不同的参数,请将其放入函数中。如果您知道情况不会如此,那么只需写出代码即可。

© www.soinside.com 2019 - 2024. All rights reserved.