4

PHP で ODBC 拡張機能を使用して、SQL 2000 サーバーに接続しています。これが私が反対しているものです:

  1. odbc_exec()ORでクエリを実行できます
  2. でクエリを実行できますodbc_execute()

私の意見では、これら 2 つのクエリ実行方法の違いは、昼と夜の違いとほぼ同じです。

  1. odbc_exec()非 SQL セーフ クエリを実行し、クエリの結果を返します
  2. odbc_execute()odbc_prepare()データベースで SQL セーフ クエリを実行するために と組み合わせて使用​​されます。ただし、odbc_execute()ブール値のみを返すことができるため、ステートメントから結果を返したり、 orステートメントSELECTから更新された行数を確認したりするために使用することはできませんUPDATEDELETE

これは本当にこれがすべて機能する方法ですか、またはで使用するために値をエスケープしodbc_exec()たり、から結果を取得したりする方法はありodbc_execute()ますか?

PHP のドキュメントは、上記のジレンマに対する解決策を示していないようです。

お時間をいただきありがとうございます。

4

2 に答える 2

6

実行中のクエリのリソースは、odbc_execute ではなく、odbc_prepare 関数によって返されます。

これら 2 つのコード ブロックは同じことを行います。

$query=odbc_exec("SELECT * FROM table WHERE userinput=".$hopefully_escaped_user_input);
while($row=odbc_fetch_array($query) {
  //do stuff with $row
}



$query=odbc_prepare("SELECT * FROM table WHERE userinput=?");
odbc_execute($query,Array($user_input);
while($row=odbc_fetch_array($query) {
  //do stuff with $row
}
于 2012-06-27T21:52:21.823 に答える
3

準備済みステートメントは、準備済みステートメントを「指す」リソースと組み合わせて使用​​されます。

SQLで定義した関数/プロシージャであるかのように準備されたステートメントを想像し、リソースを使用してその関数を「呼び出し」ます。

ここからの例:

<?php
$res = odbc_prepare($db_conn, $query_string);
if(!$res) die("could not prepare statement ".$query_string);

if(odbc_execute($res, $parameters)) {
    $row = odbc_fetch_array($res);
} else {
    // handle error
}
?>
于 2012-06-27T21:54:42.900 に答える