带有准备好的语句的 PDO 事务不起作用
PDO Transaction with Prepared Statements not working
我有一个 PDO 事务,我在其中尝试使用准备好的语句对我的数据库进行 运行 两个查询。它们都是插入语句,它们将来自 Facebook 的数据插入到两个单独的表中(名为 "player" 和 "bank")。
Facebook 数据通过 AJAX post 发送到此 php 脚本。我已经确定我的数据库是 InnoDB,所以它与 PDO 事务兼容,并且 Facebook 数据正在到达 php 脚本(因为我尝试了一个 basic/unsecure Insert 语句与这个 AJAX post 并且运行良好),但我似乎无法让事务处理准备好的语句。我认为我错误地整合了两者。
这是我当前的代码:
<?php
$servername = "myserver";
$username = "myusername";
$password = "mypassword";
$dbname = "mydatabase";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->beginTransaction();
// prepare sql and bind parameters
$stmt = $conn->prepare("INSERT INTO player (fb_id, f_name, l_name, email, gender)
VALUES (:fb_id, :firstname, :lastname, :email, :gender)");
$stmt->bindParam(':fb_id', $userid);
$stmt->bindParam(':firstname', $userfirst_name);
$stmt->bindParam(':lastname', $userlast_name);
$stmt->bindParam(':email', $useremail);
$stmt->bindParam(':gender', $usergender);
$userid = $_POST['userid'];
$userfirst_name = $_POST['userfirst_name'];
$userlast_name = $_POST['userlast_name'];
$useremail = $_POST['useremail'];
$usergender = $_POST['usergender'];
$stmt->execute();
$stmt = $conn->prepare("INSERT INTO bank (fb_id, cb, gb, invite)
VALUES (:fb_id, :cb, :gb, :invite)");
$stmt->bindParam(':fb_id', $userid);
$stmt->bindParam(':cb', $cb);
$stmt->bindParam(':gb', $gb);
$stmt->bindParam(':invite', $invite);
$userid = $_POST['userid'];
$cb = "100";
$gb = "0";
$invite = "0";
$stmt->execute();
}
catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}
$conn = null;
?>
我试过使用 alert(response);
来查看此 PHP 的输出是什么,但它给了我一个空白结果。
如果有人能给我任何建议,那就太棒了!
另外,这是对我的数据库进行 运行ning 查询的非常安全的方法吗?它可以免受注入攻击吗?
提前致谢!
每笔交易应以
开头
beginTransaction()
并以
结束
commit()
您可以在执行最后一个查询后立即提交事务:
$stmt->execute();
$conn->commit();
我有一个 PDO 事务,我在其中尝试使用准备好的语句对我的数据库进行 运行 两个查询。它们都是插入语句,它们将来自 Facebook 的数据插入到两个单独的表中(名为 "player" 和 "bank")。
Facebook 数据通过 AJAX post 发送到此 php 脚本。我已经确定我的数据库是 InnoDB,所以它与 PDO 事务兼容,并且 Facebook 数据正在到达 php 脚本(因为我尝试了一个 basic/unsecure Insert 语句与这个 AJAX post 并且运行良好),但我似乎无法让事务处理准备好的语句。我认为我错误地整合了两者。
这是我当前的代码:
<?php
$servername = "myserver";
$username = "myusername";
$password = "mypassword";
$dbname = "mydatabase";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn->beginTransaction();
// prepare sql and bind parameters
$stmt = $conn->prepare("INSERT INTO player (fb_id, f_name, l_name, email, gender)
VALUES (:fb_id, :firstname, :lastname, :email, :gender)");
$stmt->bindParam(':fb_id', $userid);
$stmt->bindParam(':firstname', $userfirst_name);
$stmt->bindParam(':lastname', $userlast_name);
$stmt->bindParam(':email', $useremail);
$stmt->bindParam(':gender', $usergender);
$userid = $_POST['userid'];
$userfirst_name = $_POST['userfirst_name'];
$userlast_name = $_POST['userlast_name'];
$useremail = $_POST['useremail'];
$usergender = $_POST['usergender'];
$stmt->execute();
$stmt = $conn->prepare("INSERT INTO bank (fb_id, cb, gb, invite)
VALUES (:fb_id, :cb, :gb, :invite)");
$stmt->bindParam(':fb_id', $userid);
$stmt->bindParam(':cb', $cb);
$stmt->bindParam(':gb', $gb);
$stmt->bindParam(':invite', $invite);
$userid = $_POST['userid'];
$cb = "100";
$gb = "0";
$invite = "0";
$stmt->execute();
}
catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}
$conn = null;
?>
我试过使用 alert(response);
来查看此 PHP 的输出是什么,但它给了我一个空白结果。
如果有人能给我任何建议,那就太棒了! 另外,这是对我的数据库进行 运行ning 查询的非常安全的方法吗?它可以免受注入攻击吗?
提前致谢!
每笔交易应以
开头beginTransaction()
并以
结束commit()
您可以在执行最后一个查询后立即提交事务:
$stmt->execute();
$conn->commit();