Подготовленные операторы возвращают 0 строк, обычный запрос возвращает 1 строку - PullRequest
1 голос
/ 25 марта 2012

У меня возникла эта проблема, когда подготовленный оператор возвращает 0 строк, а обычный запрос возвращает 1 строку

Это подготовленный оператор

$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

И да 1 - это строка, поскольку полеперечисление в базе данных

Обычный запрос

$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);

Весь код (возможно, это проблема, надеюсь, через несколько минут мы ее выясним)

  $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 ]

0 голосов
/ 25 марта 2012

Изменить

  $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();

На

  $check_request->execute();
  $check_request->store_result();
  $check_request->bind_result($reqid, $req_sender, $req_accepter, $req_status);
  $nrow1 = $check_request->num_rows;
  $check_request->fetch();
  $check_request->free_result();
  $check_request->close();

  $check_request_1->execute();
  $check_request_1->store_result();
  $check_request_1->bind_result($reqid1, $req_sender1, $req_accepter1, $req_status1);
  $nrow2 = $check_request_1->num_rows;
  $check_request_1->fetch();
  $check_request_1->free_result();
  $check_request_1->close();

  $check_request_2->execute();
  $check_request_2->store_result();
  $check_request_2->bind_result($reqid2, $req_sender2, $req_accepter2, $req_status2);
  $nrow3 = $check_request_2->num_rows;
  $check_request_2->fetch();
  $check_request_2->free_result();
  $check_request_2->close();
0 голосов
/ 25 марта 2012

Обновление: после просмотра комментариев становится ясно, что оба условия не одинаковы. Итак, вот исправление для вашего кода.

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...