无法借助事务插入到两个不同的表中

Unable to insert into two different tables with help of transactions

下面是我编写的代码,其中我试图在事务的帮助下将数据插入到两个不同的表中,但代码没有执行。非常努力地找出问题,但无法解决。

我收到此错误:您的 SQL 语法有误;查看与您的 MariaDB 服务器版本对应的手册,了解在 ''u_id_fk','device_type','ip_num','package','pkg_id_fk') VALUES(第 1 行的 '79','abc','128.1'[]

                $cust_name = 'multi';
                $u_name = 'multi2';
                $cnic_num = '421';
                $address = 'sadaddd';
                $password = md5('423423'); 
                $cellnum='43243';
                $p_id_fk=(int)'3';



                    try {
                            // First of all, let's begin a transaction
                            $conn->beginTransaction();
                            // If we arrive here, it means that no exception was thrown
                            // i.e. no query has failed, and we can commit the transaction
                             // Forgot to close the VALUES bracket and couldn't find your $email
                            $users_stmt=$conn->prepare("INSERT INTO users (`cust_name`, `u_name`, `cnic`, `address`, `password`, `email`) VALUES (:cust_name, :u_name, :cnic, :address, :password, :email)");
                            // PDO::execute() can accept an array of parameter bound to your query so you may avoid selecting data type when using bindParam()
                           $users_stmt->execute(["cust_name"=>$cust_name, "u_name"=>$u_name, "cnic"=>$cnic_num, "address"=>$address, "password"=>$password, "email"=>$email]);
                            // Not sure if $db is a PDO object...
                            $connections_stmt=$conn->prepare("INSERT INTO connections('u_id_fk','device_type','ip_num','package','pkg_id_fk') VALUES(:u_id_fk,:device_type,:ip_num,:package,:pkg_id_fk)");
                            $connections_stmt->execute(["u_id_fk"=>$u_id,"device_type"=>$device_type,"ip_num"=>$ip_num,"package"=>$package,"pkg_id_fk"=>$p_id_fk]);


                            $conn->commit();
                        } catch (Exception $e) 
                        {
                            // An exception has been thrown
                            // We must rollback the transaction
                            $conn->rollback();
                            echo $e;
                        }   

请帮忙解决!谢谢

你第一个语句中的右双引号不正确,它必须在它的末尾,而且你错过了 prepare 函数的结束括号

 $stmt=$conn->prepare("INSERT INTO users (cust_name, u_name,cnic,address,password,email) VALUES (?, ?, ?, ?, ?, ?)");

请尝试更正该拼写错误。

连接时将PDO错误模式设置为EXCEPTION非常重要

避免使用简单的密码哈希算法,因为它可以使用 Rainbow Attack 提取。

$cust_name = 'multi';
$u_name = 'multi2';
$cnic_num = '421';
$address = 'sadaddd';
$password = md5('423423'); 
$cellnum='43243';
$p_id_fk=(int)'3';

try {
    // DB vars
    $db_host="";
    $db_name="";
    $db_username="";
    $db_password="";

    // Create a new PDO connection and set error mode to EXCEPTION
    $conn=new PDO("mysql:host=".$db_host.";dbname=".$db_name,$db_username,$db_password,array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

    $conn->beginTransaction();

    // Forgot to close the VALUES bracket and couldn't find your $email
    $users_stmt=$conn->prepare("INSERT INTO users (`cust_name`, `u_name`, `cnic`, `address`, `password`, `email`) VALUES (:cust_name, :u_name, :cnic, :address, :password, :email)");
    // PDO::execute() can accept an array of parameter bound to your query so you may avoid selecting data type when using bindParam()
    $users_stmt->execute(["cust_name"=>$cust_name, "u_name"=>$u_name, "cnic"=>$cnic_num, "address"=>$address, "password"=>$password, "email"=>$email]);
    $connections_stmt=$conn->prepare("INSERT INTO connections(`u_id_fk`,`device_type`,`ip_num`,`package`,`pkg_id_fk`) VALUES(:u_id_fk, :device_type, :ip_num, :package, :pkg_id_fk)");
    $connections_stmt->execute(["u_id_fk"=>$u_id, "device_type"=>$device_type, "ip_num"=>$ip_num, "package"=>$package, "pkg_id_fk"=>$p_id_fk]);

    $conn->commit();
} catch (Exception $e){ 
    $conn->rollback();
    echo $e->getMessage();
}