За последние 24 часа нас посетили 15153 программиста и 1671 робот. Сейчас ищут 955 программистов ...

oci_bind_by_name(): ORA-01036: illegal variable name/number

Тема в разделе "PHP и базы данных", создана пользователем Sout, 4 авг 2016.

  1. Sout

    Sout Новичок

    С нами с:
    27 июл 2016
    Сообщения:
    11
    Симпатии:
    0
    Доброго времени суток всем.

    Пишу авторизацию, точнее учусь писать авторизацию. Регистрацию уже сделал, все работает без проблем.

    Хочу проверить работает ли авторизация, при отправке логина и пароля, выходит ошибка oci_bind_by_name(): ORA-01036: illegal variable name/number

    PHP:
    1. <?php session_start();
    2.  
    3.     $orcl = "(DESCRIPTION =
    4.     (ADDRESS_LIST =
    5.       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.111)(PORT = 1521))
    6.     )
    7.     (CONNECT_DATA =
    8.       (SERVICE_NAME = orcl)
    9.     )
    10.   )";
    11.  
    12.    //Проверяем наличие переменных
    13.    if (isset($_POST['login']) && isset($_POST['loguname']) && isset($_POST['logpasswd'])) {
    14.  
    15.    //Если таковые существуют законнектиться к БД
    16.            $conn = oci_connect("users", "123", $orcl) or die("<h1>DB is not accessible");
    17.         oci_error($conn);
    18.     //Хешируем пароль
    19.         $pwdhash = password_hash($_POST['logpasswd'], PASSWORD_DEFAULT);
    20.    
    21.     //Присваиваем переменным значения POST, для удобства работы с БД
    22.         $loguname = $_POST['loguname'];
    23.         $logpasswd = $pwdhash;
    24.         $selectindb = "SELECT Username FROM admin.UsersFile WHERE Username = ':loguname' AND Userpasswd = ':logpasswd' ";
    25.  
    26.         $sendto = oci_parse($conn, $selectindb);
    27.  
    28.     //Прописываем бинды для корректной работы бд
    29.         oci_bind_by_name($sendto, ':loguname', $loguname);
    30.         oci_bind_by_name($sendto, ':logpasswd', $logpasswd);
    31.        
    32.         oci_execute($sendto);
    33.         oci_error($sendto);
    34.         while (($row = oci_fetch_assoc($sendto)) != false) {
    35.             if ($row['USERNAME'] == $loguname && $row['USERPASSWD'] == $logpasswd) {
    36.                 $_SESSION['loguname'] = $loguname;
    37.             } else { echo "Encorrect login or password";}
    38.  
    39.             if (isset($_POST['logout'])) {
    40.                 unset($_SESSION['loguname']); }
    41.         }
    42.    }
    43.  
    44. ?>
    45.  
    46. <?php
    47.      if (isset($_SESSION['loguname'])) {
    48.          echo "You are welcome " . $loguname;
    49.      }
    50.   ?>
    51.    
    52.     <form action="" method="POST">
    53.         <input type="submit" name="logout" value="Выйти">
    54.     </form>
    на сколько я понимаю, вся проблема в этих ковычках.
    Помогите пожалуйста и вот еще, правильный ли сам алгоритм авторизации?
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Может кавычки по убирать ':loguname'
     
  3. Sout

    Sout Новичок

    С нами с:
    27 июл 2016
    Сообщения:
    11
    Симпатии:
    0
    почитал еще раз про бинды, оказывается действительно, при запросах одинарные кавычки ставить не нужно. Пытался еще раз авторизоваться, но ничего не происходит и ошибок никаких не выдаёт((
    --- Добавлено ---
    видать сам алгоритм кривоватый, ладно покопаюсь пока, может че получится. Если у кого есть какие идеи, пишите пожалуйста
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв