2013-10-10 5 views
1

У меня возникли проблемы с моей формой поиска в базе данных. По большей части страница работает нормально, но я получаю две ошибки.Ошибка запроса «неверный идентификатор»

Внимание: ociexecute() [function.ociexecute]: ОР-00904: * $ search_term *: неверный идентификатор в * */search_results.php на линии 53

Внимание: ocifetch() [функция. ocifetch]: ORA-24374: определение не выполняется до извлечения или выполнения и выборки в **/search_results.php в строке 70

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

Edit: Забыл не говоря, в таблице отображается ничего, несмотря на ввод условия поиска, которые должны получить результаты

Edit 2: Когда запрос изменен на SELECT * FROM Телефоны, он работает нормально. Это должно быть связано с запросом.

<?php 
    $search_term = $_POST['search_box']; 

    /* Set oracle user login and password info */ 
    $dbuser = "**"; /* your login */ 
    $dbpass = "**"; /* your oracle access password */ 
    $db = "**"; 
    $connect = OCILogon($dbuser, $dbpass, $db); 

    if (!$connect) { 
    echo "An error occurred connecting to the database"; 
    exit; 
    } 

    /* build sql statement using form data */ 
    $query = "SELECT * FROM Phones WHERE Name LIKE ".$search_term; 

    /* check the sql statement for errors and if errors report them */ 
    $stmt = OCIParse($connect, $query); 
    echo "SQL: $query<br>"; 
    if(!$stmt) { 
     echo "An error occurred in parsing the sql string.\n"; 
     exit; 
    } 
    OCIExecute($stmt); //line 53 
    ?> 

    <h1 class="green">PHP and Oracle databases</h1> 
    <h4>Table: <em>Phones</em></h4> 
    <div align="center"> 
    <table width="850" border="0" bgcolor="#339933" cellpadding="5" cellspacing="1"> 
    <tr bgcolor="#006633"> 
    <td width="75">ID</td> 
    <td width="75">Name</td> 
    <td width="100">Brand</td> 
    <td width="75">Photo</td> 
    </tr> 

    <?php 

    // Display all the values in the retrieved records, one record per row, in a loop 
    while(OCIFetch($stmt)) { //line 70 
     // Start a row for each record 
     echo("<tr valign=top bgcolor=#ccffcc>"); 
     // Output fields, one per column 
     // Drainage value in column one 
     $fg1 = OCIResult($stmt,"ID"); //"ID number"; 
     echo("<td width=75>"); 
     echo ($fg1); 
     echo("</td>"); 
     // Aspect value in column two 
     $fg2 = OCIResult($stmt,"NAME");//"Name of product"; 
     echo("<td width=75>"); 
     echo ($fg2); 
     echo("</td>"); 
     // Temperature value in column three 
     $fg3 = OCIResult($stmt,"BRAND");//"Brand of product"; 
     echo("<td width=75>"); 
     echo ($fg3); 
     echo("</td>"); 
     // Height value in column four 
     $fg4 = OCIResult($stmt,"PHOTO");//"Photo file path"; 
     echo("<td width=75>"); 
     echo ($fg4); 
     echo("</td>"); 

     // End the row 
     echo("</tr>"); 
    } 
    // Close the connection 
    OCILogOff ($connect); 
    ?> 
+1

Я предполагаю, что ваша команда SQL нуждается в кавычки вокруг '$ search_term'. – RBarryYoung

+0

@RBarryYoung Я пробовал это, это не имеет значения – SuperDicko

+0

Первое сообщение об ошибке, которое я написал в описании, говорит «$ search_term» вместо $ search_term. Что-то, что следует отметить, когда запрос изменен на SELECT * FROM Phones, он отлично работает. Это должно быть связано с запросом. – SuperDicko

ответ

1

Похоже, что ваша команда SQL нуждается в котировках вокруг вашего содержимого $search_term.

Я не знаю PHP, но я предполагаю, что это должно быть что-то вроде этого:

$query = "SELECT * FROM Phones WHERE Name LIKE '%".$search_term."%'"; 

Обратите внимание на добавление апострофов (кавычка SQL), и знак процента (символ подстановки LIKE в). Я не уверен, как вы правильно указываете апострофы (') и процентные знаки (%) в PHP, поэтому вы должны это проверить.

(К сожалению, я не знаю, как сделать это в регистронезависимом поиск по Oracle, вы должны размещать, что как отдельный вопрос.)

Смежные вопросы