为什么pdo事物控制处理不了呢

为什么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

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕小尤 2019-09-12 11:55:19

同学你好,取消使用header的方法,使用script的方法就可以进行弹框与跳转了。与提示请先登录代码一样即可。祝学习愉快!

提问者 慕仙0328516 2019-09-12 10:28:49

if($r1>0&&$r2>0){
       $pdo->commit();
       echo '<script>alert("操作成功");</script>';
   }else{
       $pdo->rollBack();
       echo '<script>alert("操作成功");</script>';
   }
   $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1);
   header('location:index.php');
}else{

这块代码我想操作成功就弹出操作成功对话框,但是这样写好像不对,应该怎么样写呢

好帮手慕小尤 2019-09-12 10:04:15

同学你好,同学在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>';
}

祝学习愉快!

  • 提问者 慕仙0328516 #1
    WHERE name='$_SESSION[name]' 这里面的为啥就不用$_SESSION['name']了呢
    2019-09-12 10:20:37
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师