Возможно, вы используете указатель мыши по умолчанию X. Попробуйте изменить его на что-то еще. Например, sudo apt-get install oxygen-cursor-theme и установите его в инструмент gnome-tweak.
У вас здесь несколько проблем. Во-первых, переменные не интерполируются на строки, заключенные в одинарные кавычки. Попробуйте этот простой скрипт, чтобы понять, что я имею в виду:
$a = 'hi';
print 'Value: $a'; // prints 'Value: $a'
vs.
$a = 'hi';
print "Value: $a"; // prints 'Value: hi'
Во-вторых, вам нужно будет избежать переменных перед их использованием для построения SQL-запроса. Один символ «» в любой из POST-переменных разбивает ваш запрос, что дает вам неверную синтаксическую ошибку Oracle.
Наконец, и, возможно, самое главное, я надеюсь, что это всего лишь пример кода? Вы используете нефильтрованный ввод пользователя для построения SQL-запроса, который дает вам возможность открывать атаки SQL-инъекций. Выключение переменных, по крайней мере, предотвратит наихудший тип атак, но вы все равно должны сделать некоторые проверки. Никогда не используйте «испорченные» данные для построения запросов.
Если вы все еще начинаете разработку, я хочу предложить напрямую использовать функции AdoDB вместо функций oci_.
Ваш код выше можно переписать с помощью AdoDB , как это :
<?php
include_once('config.php');
$url_name=$_POST['textfield'];
$keyword_name=$_POST['textarea'];
$cat_news=$_POST['checkbox'];
$cat_sports=$_POST['checkbox2'];
$anchor_text=$_POST['textfield2'];
$description=$_POST['textarea2'];
//do db connection
$adodb =& ADONewConnection("oci8://ORAUSER:ORAPASS@127.0.0.1/XE");
if ( ! $adodb )
{
die("Cannot connect to database!");
}
//set mode
$adodb->SetFetchMode(ADODB_FETCH_BOTH);
//data for insert
$tablename = 'URL';
$data['Url_ID'] = 9;
$data['Url_Name'] = $url_name;
$data['Anchor_Text'] = $anchor_text;
$data['Description'] = $description;
$result = $adodb->AutoExecute($tablename, $data, 'INSERT');
if ( ! $result )
{
die($adodb->ErrorMsg());
return FALSE;
}
//reaching this line meaning that insert successful
В моем коде выше вам просто нужно создать ассоциативный массив с именем столбца в качестве ключа, а затем назначить значение для правильного столбца. Администрирование данных обрабатывается AdoDB автоматически, поэтому вам не нужно делать это вручную для каждого столбца.
AdoDB - это библиотека с несколькими базами данных, поэтому вы можете изменять привязки баз данных с помощью минимальное изменение кода в вашем приложении.
Вам нужны одинарные кавычки вокруг полей varchar, которые вы вставляете (я полагаю, это url_name, anchor_text и описание). Единственная цитата, которую вы сейчас используете, только делает эти значения строкой, но в Oracle, поля varchar должны иметь одинарные кавычки вокруг них. Попробуйте это:
$sql1="insert into URL(Url_ID,Url_Name,Anchor_Text,Description) VALUES( 9,'".'{$url_name}'."','".'{$anchor_text}'."','".'{$description}'."')";
У меня нет PHP где-нибудь, чтобы его протестировать, но это должно создать одинарные кавычки вокруг ваших значений.
Поскольку на самом деле sql вы в конечном итоге будете выполнение в базе данных будет выглядеть так:
insert into URL
(
Url_ID,
Url_Name,
Anchor_Text,
Description
)
VALUES
(
9,
'My Name',
'My Text',
'My Description'
)
Основная статья Переменные привязки в Oracle и PHP, похоже, не работают, но вот версия кэша Google, в которой подробно описывается, как связывать переменные в PHP , Вы определенно хотите сделать это для 1) производительности и 2) безопасности от SQL-инъекции.
Кроме того, мой PHP немного ржавый, но похоже, что вы также можете сделать свое исходное заявление запроса следующим образом:
$sql1="insert into URL(Url_ID,Url_Name,Anchor_Text,Description) values ( 9, '$url_name', '$anchor_text', '$description')";
Edit Также вам нужно избегать любых одинарных кавычек, которые могут присутствовать в данных, которые вы получаете от ваших переменных формы. В строковой цепочке Oracle вам нужно преобразовать одинарные кавычки в 2 одинарные кавычки, чтобы избежать их. См. Раздел Переменные привязки в Oracle и PHP под заголовком «Как вставлять строки, содержащие кавычки?»
Трудно сказать, не видя, как выглядит сгенерированный SQL, какую кодировку вы публикуете и какую кодировку использует база данных.
Сборка нефильтрованного содержимого пользователя в SQL-заявлении и отправка его в БД - это рецепт катастрофы. Хотя другие API БД в PHP имеют функцию выхода, IIRC это недоступно для Oracle - вы должны использовать привязку данных.
C.
Это потому, что в строке запроса вы не указали кавычки. Попробуйте это вместо:
$sql1="insert into URL(Url_ID,Url_Name,Anchor_Text,Description)
VALUES( 9,\".'{$url_name}'.\",\".'{$anchor_text}'.\",\".'{$description}'.\")";