Создание SQL-запроса в виде строки с использованием PHP
$isbn = strval($_POST['select_catalog']);
$conn = oci_connect($username, $password, $db);
$stmt = oci_parse($conn,
"select title_name, author, pub_name, price, qty_on_hand ".
"from publisher, title ".
"where publisher.pub_no = title.pub_no and ".
"isbn = :bind1");
oci_bind_by_name($stmt, ":bind1", $isbn, 10);
oci_execute($stmt, OCI_DEFAULT);
Приведенный выше код захватывает ISBN из выпадающего меню выбора при отправке формы, stmt - это мой sql-запрос, и я использую переменные связывания (но я также пытался это сделать, просто вставляя ISBN)
Проблема, с которой я сталкиваюсь в любом случае, состоит в том, что моя переменная $ isbn задает ее как число, мой SQL-запрос ожидает varchar2, поэтому вокруг него должны быть кавычки. Однако я не могу использовать \ для выхода из PHP, чтобы заключить в кавычки ":bind1". Когда запрос выполняется, вы получаете сообщение об ошибке из БД с неожиданным номером. Есть ли способ поместить цитаты вокруг:bind1?
2 ответа
Решение
Вам не нужно цитировать это
oci_bind_by_name($stmt, ":bind1", (string)$isbn, 10, SQLT_CHR);
попробуйте указать тип и привести параметр к строке.
Пытаться:
oci_bind_by_name($stmt, ":bind1", strval($isbn), 10);