为什么pdo事物控制处理不了呢
<?php
error_reporting(E_ALL &~ E_NOTICE);
header('Content-type:text/html;charset=utf-8');
session_start();
$payee=$_POST['payee'];
$transMoney = $_POST['transMoney'];
//$ch = intval($transMoney);
//var_dump($ch);
if($_SESSION['name']){
$dsn='mysql:host=localhost;dbname=imooc';
$pdo=new PDO($dsn,'root','root');
$pdo->exec('set names utf8');
$pdo->beginTransaction(); //开启事物
$sql1='UPDATE student_management SET money=money-"$transMoney" WHERE name=\'$_SESSION["name"]\'';
$r1=$pdo->exec($sql1);
$sql2='UPDATE student_management SET money=money+"$transMoney" WHERE name="$payee"';
$r2=$pdo->exec($sql2);
if($r1>0&&$r2>0){
$pdo->commit();
echo '操作成功';
}else{
$pdo->rollBack();
echo '操作失败';
}
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1);
}else{
echo '<script>
alert("请先登录");
window.location.href="index.php";
</script>';
}
已经有$_SESSION['']值了
执行结果是操作失败
正在回答 回答被采纳积分+1
同学你好,同学在SQL语句中使用单引号导致未解析变量导致修改失败。代码如下:
<?php // 在平常测试时是不会抑制错误的 // error_reporting(E_ALL &~ E_NOTICE); header('Content-type:text/html;charset=utf-8'); session_start(); $payee=$_POST['payee']; $transMoney = $_POST['transMoney']; //$ch = intval($transMoney); //var_dump($ch); if($_SESSION['name']){ $dsn='mysql:host=localhost;dbname=wish'; $pdo=new PDO($dsn,'root','root'); $pdo->exec('set names utf8'); $pdo->beginTransaction(); //开启事物 // sql语句应该使用双引号, 因双引号解析变量单引号不解析变量 $sql1="UPDATE reg SET money=money-'$transMoney' WHERE name='$_SESSION[name]'"; $r1=$pdo->exec($sql1); $sql2="UPDATE reg SET money=money+'$transMoney' WHERE name='$payee'"; $r2=$pdo->exec($sql2); if($r1>0&&$r2>0){ $pdo->commit(); echo '操作成功'; }else{ $pdo->rollBack(); echo '操作失败'; } $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1); }else{ echo '<script> alert("请先登录"); window.location.href="index.php"; </script>'; }
祝学习愉快!
- 参与学习 人
- 提交作业 225 份
- 解答问题 3372 个
掌握用PHP开发互联网网站的必备功能,掌握当下主流的Linux系统开发,并熟练使用热门框架ThinkPhp开发电商团购项目,是通向PHP工程师必经之路。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星