#php #oracle
#php #Oracle
Вопрос:
Итак, я только начал работать над PHP с Oracle, и я получаю значения от пользователя, используя опцию выбора, как вы можете видеть в HTML-файле, однако, когда я применяю условие where к ‘Job’, оно не будет соответствовать значениям. Я также использовал ‘upper’ с условием where, чтобы избежать чувствительности к регистру, но это не сработало. Напротив, когда я применяю условие where для ‘deptno’, оно работает нормально. Есть ли что-то, чего мне не хватает?
<html>
<body>
<form action="emp_info.php" method="POST">
<b>Job:amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;</b>
<select name="Employee" id="Employee">
<option value="CLERK">CLERK</option>
<option value="SALESMAN">SALESMAN</option>
<option value="MANAGER">MANAGER</option>
<option value="ANALYST">ANALYST</option>
<option value="PRESIDENT">PRESIDENT</option>
</select>
<br>
<br>
<b>Department Number:</b>
<select name="Department" id="Department">
<option value="10">ten</option>
<option value="20">20</option>
<option value="30">30</option>
</select>
<br>
<br>
<input type="submit">
</form>
</body>
</html>
emp_info.php
<?php
$db_sid =
"(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DESKTOP-KFR5A5D)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)"; // Your oracle SID, can be found in tnsnames.ora ((oraclebase)appYour_usernameproduct11.2.0dbhome_1NETWORKADMIN)
$db_user = "scott"; // Oracle username e.g "scott"
$db_pass = "tiger1234"; // Password for user e.g "1234"
$deptno1=$_POST['Department'];
$job1=$_POST['Employee'];
echo $job1;
$con = oci_connect($db_user,$db_pass,$db_sid);
if($con)
{ echo "Oracle Connection Successful."; }
else
{ die('Could not connect to Oracle: '); }
$q = "select empno,ename,job, mgr, to_char(hiredate,'dd/mm/yyyy') hiredate, sal, comm, deptno".
" from emp".
" where job=$job1";
$query_id3 = oci_parse($con, $q);
$runselect = oci_execute($query_id3);
while($row = oci_fetch_array($query_id3, OCI_BOTH OCI_RETURN_NULLS))
{
echo "<br>".$row["JOB"]."<br>";
$empno = $row["EMPNO"];
$ename = $row["ENAME"];
$job = $row["JOB"];
$mgr = $row["MGR"];
$hiredate = $row["HIREDATE"];
$sal = $row["SAL"];
$comm = $row["COMM"];
$deptno = $row["DEPTNO"];
}
?>
Комментарии:
1. Это ваш фактический пароль БД? Если это так, вы должны отредактировать его как можно скорее!
2. Вы можете распечатать
$q
и проверить, что такое запрос. Вы также можете поделиться этим здесь для получения дополнительной помощи3. @Take-Some-Bytes Спасибо, что сказали, но я использую oracle локально, так что это не будет иметь никакого значения. Но все же я изменил пароль
Ответ №1:
Возможно, вам понадобятся одинарные кавычки в строке SQL вокруг значения. Но прежде чем делать это, прочитайте последнюю половину подземного руководства по PHP и Oracle и делайте такие вещи, как использование переменных привязки (для обеспечения безопасности и производительности) вместо выполнения " where job=$job1"
. Также проверьте примеры на https://php.net/manual/en/ref.oci8.php (Наконец, рассмотрите возможность использования документа NOW для SQL).
Комментарии:
1. Большое спасибо за помощь. Вы спасли мой день