我有一个PDO事务,其中我尝试使用预准备语句在我的数据库上运行两个查询。它们都是插入语句,它们将来自Facebook的数据插入到两个单独的表中(名为"播放器"和"银行")。
Facebook数据通过AJAX帖子发送到此PHP脚本。我确保我的数据库是InnoDB,因此它与PDO Transactions兼容,并且Facebook数据正在到达php脚本(因为我尝试使用这个AJAX帖子的基本/不安全的Insert语句并且它工作得很好),但是我似乎无法让事务处理准备好的语句。我想我不正确地整合了两者。
这是我目前的代码:
<?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的输出内容,但它给了我一个空白的结果。
如果有人能就此提出任何建议,那就太棒了! 此外,这是一种在我的数据库上运行查询的非常安全的方法吗?注射攻击是否安全?
提前致谢!
答案 0 :(得分:2)
每笔交易都应以
开头beginTransaction()
以
结束commit()
您可以在执行上一个查询后立即提交事务:
$stmt->execute();
$conn->commit();