场景:php 修改id等于1的状态为0,时将该行行锁,具体代码
$dbtype = 'mysql';
$host = '127.0.0.1';
$db = 'testinnodb';
$user = 'root';
$psw = '123456';$dsn = $dbtype . ':host=' . $host . ';' . 'dbname=' . $db;try {
 $dbh = new PDO($dsn, $user, $psw, array(PDO::ATTR_PERSISTENT=>true,PDO::ATTR_AUTOCOMMIT=>0));
 echo '连接成功<br>';
} catch(Exception $e) {
die('Connect Failed Message: ' . $e->getMessage());
}
$userId = 1;try {
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    //设置错误模式,发生错误时抛出异常
$dbh->beginTransaction();//事务开始
$sql1 = 'SELECT id FROM test_innodb WHERE id = ? FOR UPDATE';    //此处加上行锁,
$sql2 = 'UPDATE test_innodb SET status=0 WHERE id = ?';    //加上行锁后,修改状态
$stmt1 = $dbh->prepare($sql1);
$stmt2 = $dbh->prepare($sql2);
$stmt1->bindParam(1, $userId);
$stmt2->bindParam(1, $userId);
$userId = 1;
$stmt1->execute();
$stmt2->execute();
echo $dbh->commit();
} catch(Exception $e) {
$dbh->rollBack();
die('Transaction Error Message: ' . $e->getMessage());
}
这样操作提交,回滚都正常,当注释掉$dbh->commit();和$dbh->rollBack();
再执行 SELECT id FROM test_innodb WHERE id = ? FOR UPDATE';
发现并没有锁行,没找到原因,请各位帮帮我看下是什么原因