关于事务与预处理的问题,感谢!

关于事务与预处理的问题,感谢!

http://img1.sycdn.imooc.com//climg/5c3309430001268013530745.jpg

  1. 由于视频里的老师没有讲清楚,请问$stmt->bind_result(),参数的顺序就是数据库字段的顺序?按照数据表从左至右的顺序?

  2. 此外while语句中的$data[],之前并没有声明,老师为啥没有报错?我记得曾经问过类似的,老师说需要设置,但是我问在哪设置,老师只说了在php.ini 里设置具体在哪里能告知下么?如果是我理解错了那么默认情况下while、if、switch 、for语句里面的变量就是全局的?

  3. 我又结合下预处理下面是代码,麻烦老师看看代码逻辑有没有错误,谢谢!

  4. 特别的mysqli->affected_rows 当查询的时候 影响的条数 是不是就是指得 查询的条数?

  5. $stmt->bind_result()与$stmt->bind_param()的顺序可以更改么?

  6. $mysqli->commit()之后才是真正的执行,所以如果要打印出$data,就需要在该语句之后?
    感谢!


  7. $mysqli = new mysqli("localhost", 'root', "", "imooc_mall");
    $mysqli->query("SET NAMES UTF8");
    //开启事务
    $mysqli->autocommit(false);
    //预处理
    $stmt = $mysqli->prepare("SELECT * FROM `test` WHERE `id`=?");
    $id = 2;
    //绑定参数
    $stmt->bind_param('i', $id);
    //绑定结果集
    $stmt->bind_result($id, $name, $age);
    //执行
    $stmt->execute();
    $mysqli->affected_rows;
    if (!$mysqli->affected_rows > 0) {
        $mysqli->rollback();
    }
    $data[]=null;
    while ($stmt->fetch()) {
        $data[] = [
            'id' => $id,
            'name' => $name,
            'age' => $age
        ];
    }
    $mysqli->commit();
    var_dump($data);

正在回答 回答被采纳积分+1

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

3回答
好帮手慕查理 2019-02-20 10:06:59

您好,同学上次最后提问时间是:

http://img1.sycdn.imooc.com//climg/5c6cb1570001f58b07190105.jpg

在回答中已经进行了回复:

http://img1.sycdn.imooc.com//climg/5c6cb17100016cfb07140127.jpg

1.如果$stmt->bind_result($id,$name,$age),这个可以改变顺序,就必须让$id 的id 与字段名一致?不然顺序变了id的值到了name上?

是,例如语句为$stmt->bind_result($id,$name,$age),但是字段的顺序为name,id,age。那么$id会绑定在name字段上。

2.while、if、switch 、for语句里面的变量 的作用域是全局还是局部啊?

while、if、switch 、for语句里面的变量作用域是全局。

3.$stmt->bind_result()与$stmt->bind_param()的顺序可以更改么?这里我的意思不是第五个问题的参数的顺序,而是这两条语句都是预编译的语句,在实际代码里顺序相互颠倒可以么?

先操作bind_param将变量绑定到预准备语句作为参数,然后再是bind_result将变量绑定到用于结果存储的预准备语句。

祝学习愉快!

  • 提问者 轩辕小齐V #1
    您截图的那个,首先我在手机上看不见了,第二有这截图正说明,我又继续提问了呀。
    2019-02-20 10:25:14
  • 提问者 轩辕小齐V #2
    也就是说result与param 顺序不能颠倒? 关于result的参数顺序,就是按照sql语句的顺序,而不是我说的根据变量名,比如$id,就让字段中的id与之对应?抱歉哈很愚钝您多多担待
    2019-02-20 10:30:28
  • 好帮手慕查理 回复 提问者 轩辕小齐V #3
    您好,是的。同学理解正确。祝学习愉快!
    2019-02-20 12:00:09
好帮手慕查理 2019-01-08 15:36:58

您好,1.bind_result的参数顺序可以改变。同学运行时改变参数顺序取出的顺序错误?请截图反馈。

2.链接如下:http://class.imooc.com/course/qadetail/77903

3.可以使用。

5.同学说的是bind_result参数可以改变吗?可以改变。

4.commit提交事务,同学所说的最后指的是哪?是所有代码的最后,还是事务处理的最后。具体放在哪是根据代码决定的。

祝学习愉快!

好帮手慕查理 2019-01-07 18:22:04

您好,1.顺序改变也可以查询数据,可以将课程代码中变量位置改变测试。

2.$data数组在循环进行了定义,并不会产生错误。循环中的变量是全局的。关于php.ini文件修改之前的回答中已表明修改哪出http://class.imooc.com/course/qadetail/77903 

3.代码中`id`=?中?应为英文状态下字符。代码中检测查询数量的函数并没有起作用。可以判断execute()是否执行成功,失败则回滚。但查询时很少使用事务操作。

4.是查询的条数。

5.bind_result参数顺序可以改变。bind_param参数顺序不可以改变。

6.语句$data在查询fetch语句之后。

祝学习愉快!

  • 提问者 轩辕小齐V #1
    老师:问题1 顺序可以改变?$stmt->bind_result($id,$name,$age),如果将$id 与$name 换过来$stmt->bind_result($name,$id,$age);那么从数据库取得值,可以自动识别?数据库里的name 字段对应$name?我才不行吧?
    2019-01-08 13:06:47
  • 提问者 轩辕小齐V #2
    老师:关于问题2,您给我的连接显示404啊;
    2019-01-08 13:08:00
  • 提问者 轩辕小齐V #3
    老师关于问题3,我就是试一试行不行,请教下,事务与预处理能不能结合?
    2019-01-08 13:15:46
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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