0

我被一段 PHP 代码(PHP 5)困住了,我在其中运行 SQL 查询(Transact SQL)。

代码(不起作用):

$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

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 回答
1

我只是在 Visual Studio 中处理了同样的问题。首先,我创建了一串参数以添加到 SQL 语句中。您只需要处理问号 (?),我所做的很多事情都超出了您的需要:

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

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

然后在创建我的选择时,我输入以下内容:

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 回答
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 回答