Предупреждение: ocifetch () [function.ocifetch]: ORA-24374: определение не выполнено до выборки или выполнения и выборки

0

Вот моя простая панель поиска для uni-назначения:

<form name="search" method="post" action="phone_search.php">
<font size="5">Best Secondhand Mobile Phones Geelong</font> - Search the site:

<input type="text" name="term"  />
<input type="submit" name="search" value="Search" />
</form>

Вот мой php-код, который обращается к серверу oracle:

echo "<h2>Results</h2>";

//Null string entered
if ($term == "")
{
    echo "You didn't enter anything!\n";
    exit;
}

//Connect to database
$dbuser = "xxxx";
$dbpass = "xxxx";
$db = "SSID";
$connect = OCILogon($dbuser, $dbpass, $db);

//Database connection error
if (!$connect) 
{
    echo "An error occurred connecting to the database.\n";
    exit;
}

//Make all lowercase
$term = strtolower($term);

$query = "'SELECT * FROM Phones WHERE lower($Name) LIKE $term' OR 'SELECT * FROM Phones WHERE lower($OS) LIKE $term' OR 'SELECT * FROM Phones WHERE lower($Chipset) LIKE $term' OR 'SELECT * FROM Phones WHERE lower($CPU) LIKE $term' OR 'SELECT * FROM Phones WHERE lower($GPU) LIKE $term'";

//Perform search
$stmt = OCIParse($connect, $query);

//And display the results
$counter = 0;
while(OCIFetch($stmt))
{
    $counter++;
    echo OCIResult($stmt, "Name");
    echo "<br>";
    echo OCIResult($stmt, "OS");
    echo "<br>";
    echo OCIResult($stmt, "Chipset");
    echo "<br>";
    echo OCIResult($stmt, "CPU");
    echo "<br>";
    echo OCIResult($stmt, "GPU");
    echo "<br>";
    echo "<br>";
}

Я получаю правильную ошибку для нулевой строки и отсутствие нулевой ошибки, когда что-то вводится. Однако, я думаю, что есть проблема с этой строкой:

$query = "'SELECT * FROM Phones WHERE lower($Name) LIKE $term' OR 'SELECT * FROM Phones WHERE lower($OS) LIKE $term' OR 'SELECT * FROM Phones WHERE lower($Chipset) LIKE $term' OR 'SELECT * FROM Phones WHERE lower($CPU) LIKE $term' OR 'SELECT * FROM Phones WHERE lower($GPU) LIKE $term'";

Я продолжаю получать эту ошибку:

Warning: ocifetch() [function.ocifetch]: ORA-24374: define not done before fetch or execute and fetch in /home/cstev/public_html/Assignment_2/phone_search.php on line 41

Строка 41:

while(OCIFetch($stmt))

Я намеренно заменил данные для входа "xxxx" перед публикацией.

Когда я ищу эту ошибку, я получаю: Ошибка в функции поиска PHP Кажется, что у кого-то еще была эта проблема 2 года назад для того же задания. Ответ, который он получил, заключался в том, что его поисковый запрос, возможно, был пустым. Я могу сказать, что это не та же проблема, что и я, поскольку сообщение об ошибке с нулевой строкой работает правильно, если введенный поисковый запрос пуст.

Если бы кто-нибудь мог указать мне в правильном направлении, я был бы очень благодарен !!

Для справки, это моя база данных:

DROP TABLE Phones;

CREATE TABLE Phones
     ( Name VARCHAR2(50), 
       OS VARCHAR2(50),
       Chipset VARCHAR(50),
       CPU VARCHAR(50), 
       GPU VARCHAR2(50), 
       Image VARCHAR2(50) 
     ); 

INSERT INTO Phones VALUES ('HTC Butterfly S', 'Android OS, v4.2.2 (Jelly Bean)', 'Qualcomm APQ8064T Snapdragon 600', 'Quad-core 1.9 GHz Krait 300', 'Adreno 320', 'images/htc-butterfly-s (1).jpg');

INSERT INTO Phones VALUES ('Huawei Ascend P6', 'Android OS, v4.2.2 (Jelly Bean)', 'Huawei K3V2', 'Quad-core 1.5 GHz', 'N/A', 'images/huawei-ascend-p6-ofic.jpg');

INSERT INTO Phones VALUES ('Oppo R819', 'Android OS, v4.2.1 (Jelly Bean)', 'MediaTek MT6589', 'Quad-core 1.2 GHz', 'PowerVR SGX544', 'images/oppo-r819.jpg');

INSERT INTO Phones VALUES ('Sony Xperia M', 'Android OS, v4.1 (Jelly Bean)', 'Qualcomm Qualcomm Snapdragon S4 Plus MSM8227', 'Dual-core 1 GHz Krait', 'Adreno 305', 'images/sony-xperia-m (1).jpg');

INSERT INTO Phones VALUES ('Samsung Galaxy Core', 'Android OS, v4.1.2 (Jelly Bean)', 'Snapdragon MSM8225 S4 Play', 'Dual-core 1.2 GHz Cortex-A5', 'Adreno 203', 'images/samsung-galaxy-core-gt-i8260 (1).jpg');

INSERT INTO Phones VALUES ('Motorola Moto X', 'Android OS, v4.2.2 (Jelly Bean)', 'Qualcomm MSM8960Pro Snapdragon', 'Dual-core 1.7 GHz Krait', 'Adreno 320', 'images/moto-x.jpg');

commit;
Теги:
database
search

1 ответ

4
Лучший ответ

Думаю, ты забыл

ociexecute($stmt, OCI_DEFAULT);

После

$stmt = OCIParse($connect, $query);

И до:

while(OCIFetch($stmt))

Таким образом, это будет выглядеть так:

//Perform search
$stmt = OCIParse($connect, $query);

// Execute statement
ociexecute($stmt, OCI_DEFAULT);

//And display the results
$counter = 0;
while(OCIFetch($stmt))
{
    $counter++;
...

Подробнее здесь

  • 0
    Спасибо! Это было определенно проблемой. Я наконец понял это с помощью «Интересно, если ..». Я также обнаружил, что могу ссылаться на столбцы базы данных только с использованием всех заглавных букв, даже если сам столбец базы данных не является заглавными: echo OCIResult($stmt, "Chipset"); не работает !!
  • 1
    Ответ содержит ошибку - утверждения «После» и «И перед:» относятся к одной строке, что является логическим абсурдом. Я пытался исправить это, но изменение было отклонено.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню