我遇到了一段PHP代碼(PHP 5),我正在運行SQL查詢(Transact SQL)。PHP MSSQL(Transact-SQL) - 使用IN子句和數組中的多個值的參數化查詢
的代碼(這是不工作):
$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_column更新MY_TABLE與添加my_id等於ABC,DEF和GHI行。
然而,當我寫的不帶參數(這工作)相同的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($my_connection, $query, array('abc', 'def', 'ghi'));
執行sqlsrv_query命令這樣
sqlsrv_query($my_connection, $query, array(array('abc', 'def', 'ghi')));
和這樣的
sqlsrv_query($my_connection, $query, 'abc', 'def', 'ghi');
他們都沒有工作。
有人可以幫我嗎?我對這本手冊有很好的閱讀。並寫這樣的SQL
... WHERE my_id IN (?,?,?)...
是不是一個選項,因爲我的數組將包含可變數量的值!
謝謝!
'$ query =「UPDATE ... WHERE my_id IN(」。implode ',',array_fill(0,count($ ids),'?'))。「)」;'輕鬆處理多個綁定參數。 – 2013-02-21 19:30:41
嗨科林,謝謝你的回答!通過imploding我的ID數組 - 我仍然從你的解決方案中獲得一個SQL注入安全的「參數化查詢」?看起來不像我(也許我錯了) - 你能解釋一下嗎?!謝謝! – Sebastian 2013-02-21 19:34:36
我不會影響你的數組ID。我創建了一串用逗號分隔的問號(佔位符)。如果你照常綁定,你仍然可以獲得綁定參數的所有好處! – 2013-02-21 19:36:54