0

SQL クエリ (Transact SQL) を実行している PHP コード (PHP 5) に行き詰まっています。

コード(動作していません):

$query = "
  UPDATE my_table
  SET my_column = 'some_value'
  WHERE my_id IN (?);" // does not work :-(
sqlsrv_query($my_connection, $query, array('abc', 'def', 'ghi')); // does not work :-(

私がやろうとしていること: my_id が abc、def、ghi に等しい行の my_column の my_table を更新します。

ただし、パラメーターなしで同じ SQL クエリを作成すると (これは機能します):

$query = "
  UPDATE my_table
  SET my_column = 'some_value'
  WHERE my_id IN ('abc', 'def', 'ghi');" // works :-)
sqlsrv_query($my_connection, $query); // works :-)

このように sqlsrv_query コマンドを実行しようとしました

sqlsrv_query($my_connection, $query, array('abc', 'def', 'ghi'));

そしてこのように

sqlsrv_query($my_connection, $query, array(array('abc', 'def', 'ghi')));

そしてこのように

sqlsrv_query($my_connection, $query, 'abc', 'def', 'ghi');

それらのどれも機能しません。

誰か助けてくれませんか?説明書をよく読んだ。そして、このようにSQLを書きます

... WHERE my_id IN (?,?,?)...

私の配列には可変量の値が含まれるため、オプションではありません!

ありがとうございました!

4

3 に答える 3

1

Visual Studioでのみ、同じ問題を処理しました。最初に、SQLステートメントに追加するパラメーターの文字列を作成しました。疑問符(?)を処理するだけでよいので、私がしたことの多くは必要以上のものです。

string[] inClause = new string[keywordTerms.Length];

for (int i = 0; i < keywordTerms.Length; i++)
    inClause[i] = ":keyword" + i.ToString("00");

次に、selectを作成するときに、次のように入力します。

sqlStatement += "WHERE kw.keyword IN (" + String.Join(", ", inClause) + ")"

最後に、このコードにパラメーターを追加しました。

for (int i = 0; i < keywordTerms.Length; i++)
    cmd.Parameters.Add(inClause[i], OracleDbType.Varchar2, 20, "keyword").Value = keywordTerms[i];

お役に立てば幸いです。

于 2013-02-21T19:43:24.127 に答える
1

私の質問に対する答えは、Colin と ESDictor によって与えられました。

$params = array('abc', 'def', 'ghi');
$query = "
  UPDATE my_table
  SET my_column = 'some_value'
  WHERE my_id IN (" . implode(',', array_fill(0, count($params), '?')) . ");" // works like a charm
sqlsrv_query($my_connection, $query, $params);

君たちありがとう!私はあなたの答え、特にコリンに賛成票を投じたいと思います(しかし、あなたが「ちょうど」コメントしたのでできません。ESDictorsの答えは基本的に同じです!

于 2013-02-22T10:13:21.650 に答える
0

これを試して:

$params = array('abc', 'def', 'ghi'); //assume it dinamic
$query = "
UPDATE my_table
SET my_column = 'some_value'
WHERE my_id IN (";
$inside = "";
foreach ($params as $key => $value) {

$inside = $inside."?,";
}

$inside = trim ($inside,",");
$query = $query.$inside.");";

sqlsrv_query($my_connection, $query, $params);

PS: コードで動的配列を処理できるようになりました XD

サルドス ;)

于 2013-02-21T19:37:50.353 に答える