gpt4 book ai didi

php - 如何将准备好的语句与 Transactions with PHP 结合使用?

转载 作者:可可西里 更新时间:2023-11-01 06:34:42 26 4
gpt4 key购买 nike

我的目标是同时使用事务和准备好的语句,以实现数据的完整性和防止 SQL 注入(inject)。

我有这个:

   try {
$cnx = new PDO($dsn,$dbuser,$dbpass);
$cnx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$cnx->beginTransaction();
$cnx->query("SELECT * FROM users WHERE username=$escaped_input");
$cnx->query("SELECT * FROM othertable WHERE some_column=$escaped_input_2");

$cnx->commit();
}

catch (Exception $e){
$cxn->rollback();
echo "an error has occured";

}

我想像使用准备好的语句那样合并查询:

$stmt=$cxn->prepare("SELECT * FROM users WHERE username=?");
$stmt->execute(array($user_input));

$stmt_2=$cxn->prepare("SELECT * FROM othertable WHERE some_column=?");
$stmt_2->execute(array($user_input_2));

我怎样才能做到这一点?

编辑

我收到这个错误:

PHP Parse error: syntax error, unexpected T_CATCH

这是我更新后的代码:

try 
{
$cnx = new PDO($dsn,$dbuser,$dbpass);
$cnx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$cnx->beginTransaction();
$stmt=$cnx->prepare("SELECT * FROM users WHERE username=?");
$stmt->execute(array($username));

$cnx->commit();

while ($row=$stmt->fetch(PDO::FETCH_OBJ)){
echo $stmt->userid;

}

catch(Exception $e) {
if (isset($cnx))
$cnx->rollback();
echo "Error: " . $e;
}

最佳答案

调用“beginTransaction”后调用“execute”即可。

在哪里你称之为“准备”并不重要。

这是一个完整的例子:

http://php.net/manual/en/pdo.begintransaction.php

示例:

 try {
$cnx = new PDO($dsn,$dbuser,$dbpass);
$cnx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$cnx->beginTransaction();

$stmt=$cxn->prepare("SELECT * FROM users WHERE username=?");
$stmt->execute(array($user_input));

$stmt_2=$cxn->prepare("SELECT * FROM othertable WHERE some_column=?");
$stmt_2->execute(array($user_input_2));

$cnx->commit();
}
catch (Exception $e){
$cxn->rollback();
echo "an error has occurred";
}

附言:1) 当然,我假设 $user_input 和 $user_input_2 立即可用。您不希望您的交易不必要地长时间挂起;)

2) 根据您上面的评论回复,我认为您可能混淆了“执行”和“开始传输/提交”。请看我的链接。

3) 你甚至需要交易吗?您只是在做两个“选择”。

4) 最后,为什么不做一个“加入”(或联合,如果兼容)而不是两个“选择”?

关于php - 如何将准备好的语句与 Transactions with PHP 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10642635/

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