0

現在、一重引用符やその他のゴミを考慮して、フォームの送信に注意を払っています。

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

次を使用して、挿入する値を準備します。

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

基本的に、これらの挿入/更新ステートメントにはプレースホルダーを使用したいと考えています。

$par1and$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 Driver]COUNT フィールドが正しくないか、構文エラー、10 行目の test.php の SQLExecDirect で SQL 状態 07001

行 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));
4

1 に答える 1

1

http://www.php.net/manual/en/function.odbc-prepare.phpによると、SQLステートメントを準備して実行し、dobc_execute()の3番目の引数に新しい配列を提供する必要があります。 :

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

つまり、コードは次のようになります。

$ insert_sql = "テーブル(field、txt)の値(?、?)に挿入";
//次の行は、コードと比較して新しいものです
$ stmt = odbc_prepare($ conn、$ insert_sql);
//次の行は$par1と$par2をarray()でラップしていることに注意してください
//削除されたバージョンが正しくありませんでした-コピー/貼り付けエラー:(
odbc_exec($ stmt、$ insert_sql、array($ par1、$ par2));
odbc_execute($ stmt、array($ par1、$ par2));
于 2009-11-17T20:25:34.680 に答える