【问题标题】:In a mysql transaction, can $pdo handle be used for multiple queries or just once?在 mysql 事务中,$pdo 句柄可以用于多个查询还是一次?
【发布时间】:2017-08-31 16:59:21
【问题描述】:

我想在 MySQL 中开始一个包含多个查询的事务,通过自学,我编写了如下代码:

$pdo = new PDO('mysql:host=localhost;dbname=project', '', '', array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => false
));

$pdo->beginTransaction();

try {

    // First Query

    $sql = "SELECT * FROM table1 WHERE table1.id = 1";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    if ($row = $stmt->fetch()) {
        // There should be only one row so I used if
    }
    else {
    }

    // Second Query

    $sql2 = "SELECT * FROM table2 WHERE table2.id = 1";
    $stmt2 = $pdo->prepare($sql2);
    $stmt2->execute();
    if ($row = $stmt2->fetch()) {
    }
    else {
    }
    $pdo->commit();
    echo "OK!";
}

catch(Exception $e) {
    echo $e->getMessage();
    $pdo->rollBack();
}

所以在我的代码中,我两次使用了相同的 $pdo

$stmt = $pdo->prepare($sql);
$stmt2 = $pdo->prepare($sql2);

然后

$pdo->commit();

当它只有一个 stmt 时,代码会很好地显示数据库数据。

我没有成功测试它,因为其他文件中存在语法错误阻止它运行。我对 PDO 很陌生,所以谁能告诉我这是否可以运行?谢谢!

【问题讨论】:

  • the manual 中是否有其他建议?
  • 谢谢!我只是粗略地查看了手册,我不这么认为......这个例子似乎大多数时候只使用 1 个查询?
  • 这看起来不错。如果你没有得到任何错误并且你不能打破它,我认为你在正确的轨道上。当使用事务时,使用相同的连接是重要的。毕竟,它们不会在不同的连接之间共享。
  • 谢谢!我将尝试修复语法错误,看看是否可以执行并回复您:)D
  • @tadman 我已经修复了语法错误,代码运行没有缺陷,数据库中的数据也成功更新了! :D

标签: php mysql pdo transactions prepare


【解决方案1】:

使用 '?' 的示例 (PDO)

<?php
/* Execute a prepared statement by passing an array of values */
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?');
$sth->execute(array(150, 'red'));
$red = $sth->fetchAll();
$sth->execute(array(175, 'yellow'));
$yellow = $sth->fetchAll();
?>

查看示例您可以看到您的错误。

第一:

$sql = "SELECT * FROM table1 WHERE table1.id = ?";

秒:

 $stmt = $pdo->prepare($sql);
    for($id=1;$id<3;$id++){
        $stmt->execute($id);
        $result=$stmt->fetchAll();
    }

对不起,我的英语不是我的母语。

【讨论】:

  • 谢谢何塞!没问题 英语也不是我的母语……我是中国人。我还有一个来自哥伦比亚的好朋友,名叫何塞!是的,我知道 ?事情,但由于我对它很陌生,我只想保持简单。但是代码在没有任何绑定的情况下成功运行“?”在其中,但是一旦我开始彻底学习 PDO,我肯定会研究它。再次感谢 Jose,我现在正在查看您的代码 :)
  • 您有多种查询方式。如果你想了解更多,我给你两个网站可以帮助你:php.netw3schools.com
  • 你为什么不呢!你推荐的网站是什么??
  • 您应该回答所提出的问题,而不仅仅是在一些不相关的话题上咆哮。
猜你喜欢
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 2020-12-24
相关资源
最近更新 更多