oci_execute возвращает неверное значение для count(*)

#php #oracle

#php #Oracle

Вопрос:

Я пытаюсь подсчитать количество строк, содержащих определенные данные. В этом случае я использую переменные привязки для выполнения задачи.

 <?php

$aid = 1;
$shortName = "TroubleMgt";
$description = "Trouble Management";
$type = "TroubleMgt";

# Lets assume I have already successfully connected to my database
$stid = oci_parse($cnx,"select count(*) TOTAL from aradmin.activities where aid = :aid and shortName = :shortName and description = :description and type = :type");

oci_bind_by_name($stid, ':aid', $aid);
oci_bind_by_name($stid, ':shortName', $shortName);
oci_bind_by_name($stid, ':description', $description);
oci_bind_by_name($stid, ':type', $type);

oci_execute($stid);

$total = oci_fetch_assoc($stid)['TOTAL'];

print $total."n";
?>
 

Выводит 4 (неверно)

Самое интересное, что когда я делаю это в Oracle в той же базе данных в той же таблице, я получаю 1, как и ожидалось (должна совпадать только 1 строка).

 SQL> var aid number
SQL> var shortName varchar2(254)
SQL> var description varchar2(4000)
SQL> var type varchar2(254)
SQL> begin
  2  select 1,'TroubleMgt','Trouble Management','TroubleMgt' into :aid,:shortName,:description,:type from dual;
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL> select count(*) TOTAL from aradmin.activities where aid = :aid and shortName = :shortName and description = :description and type = :type;

     TOTAL
----------
         1
 

Любая помощь будет высоко оценена!

Комментарии:

1. Ну, запрос выглядит как equal, parmeters тоже. Тогда 1 вижу только две возможности: 1) ваш php scritp подключается к другой базе данных 2) в сценарии есть несколько вставок. select count(*) Попробуйте заблокировать таблицу, тогда вы можете проверить пункт 2. Попробуйте переименовать таблицу, и вы можете проверить пункт 1

Ответ №1:

Команды удаления не были зафиксированы в окне sqlplus. Живи и учись.