gpt4 book ai didi

php - 为什么我的mysql事务不能正常工作?

转载 作者:行者123 更新时间:2023-11-29 22:20:38 26 4
gpt4 key购买 nike

我已经阅读和收集信息两天了,但我放弃了。我不知道为什么我的这段简单代码没有成功。

我想将一种表单中的数据插入到两个表中,是的,我知道这里和那里描述的问题完全相同,但正如我所说,我熟悉它们,还需要提出更多问题。

问题出在我的查询中,至少我是这么认为的。

这里是:

    unset($err);
//Variables
$host = 'my.server.com';
$user = '123';
$pass = 'password';
$dbname = '123';
$err = array();
$error_form = false;
$img = "sth/sth.jpg";
//Connecting to the database using mysqli application programming interface
$con = mysqli_connect($host, $user, $pass, $dbname);
if (!validate()) {
if (!$con) {
echo "Connection failed : <br />" . $new_con->connect_errno . "<br />" . $new_con->connect_error;
exit;
} else {
echo "Connected! <br />";
}
var_dump($name);
echo "<br />";
var_dump($email);
echo "<br />";
var_dump($img);
echo "<br />";
$query= "START TRANSACTION;
INSERT INTO `123`.`table1` (`name1`,`name2`)
VALUES ('". $name . "','". $email ."');
INSERT INTO `123`.`table2` (`table1_id`,`name3`,`name4`)
VALUES (LAST_INSERT_ID(),'". $story . "','". $img ."');
COMMIT;";
var_dump(mysqli_query($con,$query));
echo "<br />";
$_POST["name"] = "";
$_POST["email"] = "";
$_POST["story"] = "";
}
//Form validation
function validate() {
global $name, $email, $story, $err, $error_form;
if($_SERVER['REQUEST_METHOD']=="POST") {
if(isset($_POST["name"]) && !empty($_POST["name"])) {
$name = htmlspecialchars($_POST["name"]);
} else {
$err[0] = "Name is missing.";
$error_form = true;
}
if(isset($_POST["email"]) && !empty($_POST["email"])) {
if (filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)) {
$email = htmlspecialchars($_POST["email"]);
} else {
$err[1] = "Email was verified as incorrect.";
$error_form = true;
}
} else {
$err[1] = "Email is missing.";
$error_form = true;
}
if(isset($_POST["story"]) && !empty($_POST["story"])) {
$story = htmlspecialchars($_POST["story"]);
} else {
$err[2] = "Your story does not contain any characters, it can't be submited.";
$error_form = true;
}
}
return $error_form;
}

所有让我困惑的事情都发生在这里:

$query= "START TRANSACTION;
INSERT INTO `123`.`table1` (`name1`,`name2`)
VALUES ('". $name . "','". $email ."');
INSERT INTO `123`.`table2` (`table1_id`,`name3`,`name4`)
VALUES (LAST_INSERT_ID(),'". $story . "','". $img ."');
COMMIT;";
var_dump(mysqli_query($con,$query));

我尝试SELECTid FROMtable1表并将其SET作为>@value 而不是 LAST_INSERT_ID()。我尝试运行两个查询......许多不同的解决方案。

我发现当我转储 mysqli_query($con,$query) 时,它每次都会给出 false,除非我不使用事务,所以只是简单的查询,但我需要它们。

最后一件事是我应该使用 PDO 而不是 mysqli 吗?为什么?

为什么使用 mysqli 面向对象的风格而不是面向过程的风格?

感谢您的每一次帮助。我想了解更多,而不仅仅是实现这里的效果。

请注意,这是我在这里发表的第一篇文章,但不是第一次访问。

最佳答案

使用mysqli_query一次只能执行一个查询,请查看mysqli_multi_query()

http://www.w3schools.com/php/func_mysqli_multi_query.asp

$query= "START TRANSACTION;
INSERT INTO `123`.`table1` (`name1`,`name2`)
VALUES ('". $name . "','". $email ."');
INSERT INTO `123`.`table2` (`table1_id`,`name3`,`name4`)
VALUES (LAST_INSERT_ID(),'". $story . "','". $img ."');
COMMIT;";
var_dump(mysqli_multi_query($con,$query));

关于php - 为什么我的mysql事务不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30761451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com