Aquí es mi simple barra de búsqueda para una uni asignación:

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

Aquí está mi código php que accede a un servidor de 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>";
}

Me sale el error correcto para una cadena nula, y no nula de error cuando algo es introducido.
Sin embargo, creo que hay un problema con esta línea:

$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'";

Me sale este error:

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

Línea 41:

while(OCIFetch($stmt))

Me intencionalmente han sustituido los detalles de inicio de sesión con ‘xxxx’ antes de publicar.

Cuando la búsqueda de este error, me sale: Error en PHP la función de búsqueda
Parece como si alguien tuvo este problema hace 2 años para la misma tarea.
La respuesta que recibió fue que su término de búsqueda puede haber sido vacía.
Puedo decir que este no es el mismo problema que estoy teniendo, como por la cadena nula mensaje de error de funcionar correctamente si el término de búsqueda introducido está en blanco.

Si alguien pudiera me apunte en la dirección correcta, yo estaría más que agradecido!!

De referencia, este es mi base de datos:

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;
InformationsquelleAutor Steven C | 2013-10-10

1 Comentario

  1. 5

    Supongo que usted se olvidó de los

    ociexecute($stmt, OCI_DEFAULT);

    Después de la

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

    Y antes de la:

    while(OCIFetch($stmt))

    Por lo que tendría este aspecto:

    //Perform search
    $stmt = OCIParse($connect, $query);
    
    //Execute statement
    ociexecute($stmt, OCI_DEFAULT);
    
    //And display the results
    $counter = 0;
    while(OCIFetch($stmt))
    {
        $counter++;
    ...

    Más aquí

    • Gracias! Este fue definitivamente el problema. Finalmente me lo imaginé con un «me pregunto si..». También descubrí que sólo puede hacer referencia a columnas de base de datos mediante el uso de mayúsculas, incluso si la base de datos de la columna en sí misma no es todo en mayúsculas: echo OCIResult($stmt, "Chipset"); no funciona!!
    • La respuesta contiene un error – el ‘Después’ y la ‘Y antes de el:’ declaraciones se refieren a la misma línea, que es un absurdo lógico. Traté de corregirlo, pero el cambio fue rechazado.
    • gracias, he corregido mi respuesta.

Dejar respuesta

Please enter your comment!
Please enter your name here