Значения не сопоставляются при использовании php с oracle

#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. Большое спасибо за помощь. Вы спасли мой день