dqqy64515 2012-03-25 06:44
浏览 13

准备好的语句返回0行,普通查询返回1行

Im having this issue where prepared statement is returning 0 rows while a normal query returns 1 row

This is the prepared statement

$sender = 'marshall';
$accepter = 'LUcase';
$int1 = '1';
$check_request_1 = $friend_zone->prepare("SELECT * FROM friends_request WHERE (sender = ? and accepter = ? and status = ?) OR (accepter = ? and sender = ? and status = ?)");
$check_request_1->bind_param('ssssss', $sender, $accepter, $int1, $sender, $accepter, $int1);
$check_request_1->execute();
$check_request_1->store_result();
$nrow2 = $check_request_1->num_rows;
$check_request_1->fetch();
$check_request_1->close();

echo $nrow2

And yes 1 is a string because the field is an enum in the database

Normal query

$sql = "SELECT * FROM friends_request WHERE (accepter = 'marshall' AND sender = 'LUcase' AND status = '1') OR (accepter = 'LUcase' AND sender = 'marshall' AND status = '1')";
$query = mysqli_query($friend_zone, $sql);
$numrow = mysqli_num_rows($query);

The entire code(This might be the problem, will figure it out in a few minutes hopefully)

  $check_request = $friend_zone->prepare("SELECT * FROM friends_request WHERE (sender = ? and accepter = ? and status = ?) OR (accepter = ? and sender = ? and status = ?)");
  $check_request_1 = $friend_zone->prepare("SELECT * FROM friends_request WHERE (sender = ? and accepter = ? and status = ?) OR (accepter = ? and sender = ? and status = ?)");
  $check_request_2 = $friend_zone->prepare("SELECT * FROM friends_request WHERE accepter = ? and sender = ? and status = ?");

  $check_request->bind_param('ssssss', $sender, $accepter, $int0, $sender, $accepter, $int0);
  $check_request_1->bind_param('ssssss', $sender, $accepter, $int1, $sender, $accepter, $int1);
  $check_request_2->bind_param('sss', $sender, $accepter, $int0);

  $check_request->execute();
  $check_request_1->execute();
  $check_request_2->execute();

  $check_request->store_result();
  $check_request_1->store_result();
  $check_request_2->store_result();

  $check_request->bind_result($reqid, $req_sender, $req_accepter, $req_status);
  $check_request_1->bind_result($reqid1, $req_sender1, $req_accepter1, $req_status1);
  $check_request_2->bind_result($reqid2, $req_sender2, $req_accepter2, $req_status2);

  $nrow1 = $check_request->num_rows;
  $nrow2 = $check_request_1->num_rows;
  $nrow3 = $check_request_2->num_rows;

  $check_request->fetch();
  $check_request_1->fetch();
  $check_request_2->fetch();

  $check_request->close();
  $check_request_1->close();
  $check_request_2->close();
  • 写回答

2条回答 默认 最新

  • doulechou0700 2012-03-25 07:08
    关注

    Update : After seeing comments, it is clear that both conditions are not same. So here is the fix for your code.

    $sender = 'marshall';
    $accepter = 'LUcase';
    $int1 = '1';
    $check_request_1 = $friend_zone->prepare("SELECT * FROM friends_request WHERE (sender = ? and accepter = ? and status = ?) OR (accepter = ? and sender = ? and status = ?)");
    $check_request_1->bindParam(1, $sender);
    $check_request_1->bindParam(2, $accepter);
    $check_request_1->bindParam(3, $int1 );
    $check_request_1->bindParam(4, $accepter);
    $check_request_1->bindParam(5, $sender);
    $check_request_1->bindParam(6, $int1);
    $check_request_1->execute();
    $check_request_1->store_result();
    $nrow2 = $check_request_1->num_rows;
    $check_request_1->fetch();
    $check_request_1->close();
    
    echo $nrow2
    
    评论

报告相同问题?

悬赏问题

  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用