Заполнители с использованием универсальных драйверов ODBC

В настоящее время я приправляю формы, чтобы учесть одинарные кавычки и прочий мусор.

 $form_field_value= str_replace("'", "''", stripslashes($form_field_value));

Это подготовка значения для вставки с использованием:

 $insert_sql = "insert into table (field) values ('".$form_field_value."')";
 odbc_exec($conn, $insert_sql);

По сути, я хочу использовать заполнители для этих операторов вставки/обновления.

Я попытался определить $par1 и $par2 как литералы, а затем выполнить это

$insert_sql = "insert into table (field,txt) values (?,?)";
odbc_exec($conn, $insert_sql, $par1, $par2);

Это не удалось и выдало мне эту ошибку:

Предупреждение: odbc_exec() [function.odbc-exec]: ошибка SQL: [Microsoft] [драйвер ODBC SQL Server] неверное поле COUNT или синтаксическая ошибка, состояние SQL 07001 в SQLExecDirect в test.php в строке 10

Строка 10 — оператор exec.


Я не могу найти синтаксис для использования заполнителей с этим драйвером odbc. Какие-либо предложения?

Переменная подключения $conn работает нормально.


РЕДАКТИРОВАНИЕ:

Последняя попытка все еще не удалась - odbc_execute() является неопределенной функцией. Я должен использовать odbc_exec()

$par1="eggs";
$par2="milk";

$insert_crs = "insert into table (field,txt) values (?,?)";
$stmt = odbc_prepare($conn, $insert_sql); 

odbc_exec($stmt, array($par1, $par2));

person CheeseConQueso    schedule 17.11.2009    source источник


Ответы (1)


Согласно http://www.php.net/manual/en/function.odbc-prepare.php , вы должны подготовить, а затем выполнить свой оператор SQL, и вы должны предоставить новый массив для третьего аргумента для dobc_execute():

<?php
$a = 1;
$b = 2;
$c = 3;
$stmt    = odbc_prepare($conn, 'CALL myproc(?,?,?)');
$success = odbc_execute($stmt, array($a, $b, $c));
?>

Это означает, что ваш код должен выглядеть так:

$insert_sql = "insert into table (field,txt) values (?,?)";
// the following line is new, compared to your code
$stmt = odbc_prepare($conn, $insert_sql); 
// note that the following line wraps $par1 and $par2 with array()
// struck out version was incorrect - copy/paste error :(
odbc_exec($stmt, $insert_sql, array($par1, $par2));
odbc_execute($stmt, array($par1, $par2));
person atk    schedule 17.11.2009
comment
спасибо ... да, я просматривал этот сайт и закончил просмотр, увидев odbc_execute, а не exec .... попробуйте сейчас - person CheeseConQueso; 17.11.2009
comment
бесполезно... я пробовал exec и execute... я думал, что так и будет - person CheeseConQueso; 17.11.2009
comment
Не могли бы вы опубликовать измененный код? И вы все еще получаете ту же самую ошибку? И, на случай, если вы скопируете/вставите мой код, я сам допустил ошибку - исправлю на мгновение... - person atk; 18.11.2009
comment
А - понял. Заставляет меня задаться вопросом, отсутствует ли библиотека или документы, которые я просматривал, относятся к версии PHP, отличной от той, которую вы используете... к сожалению, я новичок в PHP, поэтому я не уверен, что это правильно вопросы, которые нужно задать... Надеюсь, кто-то еще придет с лучшей информацией. - person atk; 20.11.2009