Заполнители, использующие общие драйверы ODBC - PullRequest
0 голосов
/ 17 ноября 2009

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

 $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 работает нормально.


EDIT:

Последняя попытка все еще не удалась - 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));

1 Ответ

1 голос
/ 17 ноября 2009

Согласно 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 :(
<strike>odbc_exec($stmt, $insert_sql, array($par1, $par2));</strike>
odbc_execute($stmt, array($par1, $par2));
...