powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Работа с oracle в PHP
16 сообщений из 16, страница 1 из 1
Работа с oracle в PHP
    #38185017
SoRa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Прошу помочь с проблемой работы с oci_bind_by_name в OCI8.
В SQL выражении ($query) прикрепляю переменную $username.

if (isset($username)){
if ($c = OCILogon("user", "pass", "db")) {

if ($checkbox)
{
$query = 'alter user :username account lock';
}
else
{
$query = 'alter user :username account unlock';
}

$s = OCIParse($c, $query);
oci_bind_by_name($s, ":username", $username);
OCIExecute($s, OCI_DEFAULT);
OCILogoff($c);

} else {
$err = OCIError(); echo "Oracle
Connect Error " . $err[text];
}
}

В результате выдает следующие ошибки:
Warning: oci_bind_by_name() [function.oci-bind-by-name]: ORA-01036: неверное имя/номер переменной in Z:\home\localhost\www\test\action_user.php on line 27
Warning: ociexecute() [function.ociexecute]: ORA-01935: missing user or role name in Z:\home\localhost\www\test\action_user.php on line 28

Если вместе ($query = 'alter user :username account lock') поменять на другую выражению например на (SELECT * FROM dba_users where username = :username) то никаких проблем не возникает.

Есть какие нибудь варианты решения в данной ситуаций.
...
Рейтинг: 0 / 0
Работа с oracle в PHP
    #38185446
anvano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BIND переменные не могут использоваться вместо названий таблиц, методов, идентификаторов и т.п., т.к. они должны быть известны на момент парсинга.
Лепите имя пользователя напрямую в текст запроса.
...
Рейтинг: 0 / 0
Работа с oracle в PHP
    #38185513
SoRa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anvano, спасибо, если лепит напрямую имя пользователя то пашет без проблем, но мне заранее не известно имя пользователя.
Как быть в этом случай?
...
Рейтинг: 0 / 0
Работа с oracle в PHP
    #38186434
anvano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:)

Код: plsql
1.
$query = "alter user $username account lock";



Только я бы перед этим сначала выполнил ваш

Код: plsql
1.
SELECT * FROM dba_users where username = :username



и только если пользователь реально есть в базе - то напрямую захардкодил его в запрос, как показано выше.
...
Рейтинг: 0 / 0
Работа с oracle в PHP
    #38186546
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алсо, переменные биндятся без двоеточия. Т. е.
Код: php
1.
oci_bind_by_name($s, "username", $username);
...
Рейтинг: 0 / 0
Работа с oracle в PHP
    #38188484
SoRa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anvano,
Не получается.
$query = "alter user $username account lock";
Warning: ociexecute() [function.ociexecute]: ORA-00911: invalid character in Z:\home\localhost\www\test\action_user.php on line 28
...
Рейтинг: 0 / 0
Работа с oracle в PHP
    #38188489
SoRa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekZ,
Да, может быть, но здесь дела по моему в другом.
...
Рейтинг: 0 / 0
Работа с oracle в PHP
    #38188933
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoRa,

Видишь ли... Это не проблема на самом деле. Ты используешь DDL, в котором нельзя биндить переменные, ибо там нет кэширования плана выполнения запроса. В DML же это можно и нужно делать, как и сказал anvano.

Попробуй взять имя пользователя в кавычки, а лучше ещё в конце запроса поставить точку с запятой.
...
Рейтинг: 0 / 0
Работа с oracle в PHP
    #38189038
SoRa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekZ,
Не хочет работать есть еще варианты?
...
Рейтинг: 0 / 0
Работа с oracle в PHP
    #38189113
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор: ORA-00911: invalid character
перевести?
...
Рейтинг: 0 / 0
Работа с oracle в PHP
    #38189805
SoRa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow,
Да. Перевод с описаниям в студию.
...
Рейтинг: 0 / 0
Работа с oracle в PHP
    #38189884
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторORA-00911:
invalid character
Cause: identifiers may not start with any ASCII character other than letters and numbers. $#_ are also allowed after the first character. Identifiers enclosed by doublequotes may contain any character other than a doublequote. Alternative quotes (q'#...#') cannot use spaces, tabs, or carriage returns as delimiters. For all other contexts, consult the SQL Language Reference Manual.
...
Рейтинг: 0 / 0
Работа с oracle в PHP
    #38190860
SoRa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow,
Умник, спасибо за то что скопировал кусок из документацию и вставил тут, но я бы был благодарен тебе если бы ты на двух словах сказал что мне делать что бы заработал мой скрипт.
...
Рейтинг: 0 / 0
Работа с oracle в PHP
    #38193316
anvano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoRaanvano,
Не получается.
$query = "alter user $username account lock";
Warning: ociexecute() [function.ociexecute]: ORA-00911: invalid character in Z:\home\localhost\www\test\action_user.php on line 28

Сделай

echo $query;

Это выведет тебе реальную команду, которую ты пытаешься выполнить.
Запусти то, что вывелось прямо в своей любимой программе по работе с Oracle.

Может у тебя $username вообще левый какой-то, или из русских букв. Или ты его не задал и он пуст.
И еще - в данном случае не надо ничего биндить дополнительно, если вдруг ты это делаешь, т.к. название пользователя встраивается прямо в запрос напрямую.
...
Рейтинг: 0 / 0
Работа с oracle в PHP
    #38199938
SoRa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anvano,
если имя пользователя на прямую тыкать в запросе то работает на 100%.
Т.е.

$query = "alter user Ivan_I account lock";
работает.

Если изменить:

$username = "Ivan_I";
echo $username;
$query = "alter user $username account lock";

тоже самая ошибка.
...
Рейтинг: 0 / 0
Работа с oracle в PHP
    #38201685
SoRa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые, форумчане, есть какие нибудь варианты?
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Работа с oracle в PHP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]