Ошибка в поисковой функции PHP - PullRequest
0 голосов
/ 15 сентября 2011

Я получаю ошибки:

Warning: ociexecute() [function.ociexecute]: ORA-00936: missing expression in     /home/sjrem/public_html/ssss.php on line 31

Warning: ocifetch() [function.ocifetch]: ORA-24374: define not done before fetch or execute and fetch in /home/sjrem/public_html/ssss.php on line 49

Я хочу найти номер VIN в базе данных Oracle ... Что я делаю не так?

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Search</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php

/* Set oracle user login and password info */
$dbuser = "sjrem"; /* your deakin login */
$dbpass = "shn"; /* your oracle access password */
$db = "SSID";
$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 cars WHERE vin=$VIN";

/* 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);?>



<h1 class="green">PHP and Oracle databases</h1>
<h4>Table: <em>Cars</em></h4>
<div align="center">
<table width="850" border="0" bgcolor="#339933" cellpadding="5" cellspacing="1">
<tr bgcolor="#006633">
<td width="75" style="color:#ffff99">Vin Number</td>
<td width="75" style="color:#ffff99">Car</td>
<td width="100" style="color:#ffff99">Colour</td>
<td width="75" style="color:#ffff99">Drivetrain</td>
<td width="75" style="color:#ffff99">Location</td>
</tr>
  <?php


while(OCIFetch($stmt)) {
// Start a row for each record
echo("<tr valign=top bgcolor=#ccffcc>");

$fg1 = OCIResult($stmt,"VIN"); 
echo("<td width=75>");  
echo ($fg1);
echo("</td>");

$fg2 = OCIResult($stmt,"CAR");
echo("<td width=75>");
echo ($fg2);
echo("</td>");

$fg3 = OCIResult($stmt,"COLOUR");
echo("<td width=75>");
echo ($fg3);
echo("</td>");

$fg4 = OCIResult($stmt,"DRIVETRAIN");
echo("<td width=75>");
echo ($fg4);
echo("</td>");

$fg5 = OCIResult($stmt,"LOCATION");
echo("<td width=75>");
echo ($fg5);
echo("</td>");

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

 </table>
</div>


</body>

</html>

Ответы [ 2 ]

2 голосов
/ 15 сентября 2011

Если $ vin пусто или не задано, ваш запрос станет недействительным. Если $ vin содержит строку с нечисловыми символами, запрос, скорее всего, также будет недействительным.

Вы можете добавить кавычки вокруг значения, но в этом случае вам также нужно будет экранировать само значение. Любая поисковая строка с кавычкой сделает ваш запрос снова недействительным и может повредить вашу базу данных! Если бы я искал volvo'; delete from cars; --, ваш запрос работал бы нормально, но также удалил бы все значения из вашей таблицы. Это называется sql инъекция .

Лучший способ обойти это, особенно в Oracle, - это использовать параметры привязки для вашего запроса. В разделе о oci_bind_by_name на PHP.net есть несколько примеров, которые должны помочь вам.

0 голосов
/ 15 сентября 2011

Было бы полезно, если бы вы сказали, какие бельевые, где те, но если вы гуглите ошибку, вы получите эту страницу

Кажется, вы получаете эту ошибку, если ваш запрос не очень хорош? теперь у вас есть это:

"SELECT * from cars WHERE vin=$VIN"

Например, я никогда не вижу заполненный $VIN, так что это может привести к

SELECT * from cars WHERE vin=

, что является недопустимым SQL. Кроме того, что @jensgram говорит в комментарии: если это строка, вы должны заключить ее так:

    SELECT * from cars WHERE vin='$VIN'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...