⑴ 參數化sql查詢語句
使用ADO.NET的parameter來構造查詢語句,運行時會自動檢查參數類型是否正確,能夠有效地防止SQL injection attack
string = "select * from xinxi where id=@param";
⑵ 如何支持動態拼接SQL的參數化查詢求解答
remarkvarchar(100))go--寫入部分測試數據insertintooswica_test_table_1select1,
'oswica',''insertintooswica_test_table_1select2,
'stone',''insertintooswica_test_table_1select3,
'nana',''insertintooswica_test_table_1select4,
'nana',''go--建立存儲過程createprocoswica_proc_querytestdata(@whereSqlnvarchar(max),
@paramNameListnvarchar(max),
@paramValueListnvarchar(max))asbegindeclare@exesqlnvarchar(max)
--生成查詢語句set@exesql='EXECsp_executesqlN'
'select*fromoswica_test_table_1'
+@whereSql+''
',N'''+@paramNameList+''
','
+@paramValueList+''
print@exesqlexec(@exesql)endgo--執行存儲過程execoswica_proc_querytestdataN
'whereid=@idandname=@name',N
'@idint,@namevarchar(50)',N
'@id=1,@name=''oswica'''go--結果
--EXECsp_executesqlN'select*fromoswica_test_table_1whereid=@idandname=@name',N'@idint,@namevarchar(50)',@id=1,@name='oswica'
--idnameremark
-------------------------------------------------------------------------------------------------------------------------------------------------------------------1oswica--說明
--實際上我們不推薦直接在存儲過程中這么使用。因為這里還是存在執行代碼裡面有拼接sql的情況。
--最好的辦法是在程序代碼裡面動態拼接好然後使用參數方式動態的根據實際參數個數傳入參數,已
--實現即能夠兼容參數化查詢又能夠拼接字元串。----建議
--按照上面的說法,我們可以拼接如下sql:
--select*fromoswica_test_table_1whereid=@idandname=@name
--然後按照拼接的參數個數使用SqlCommand的Parameters動態的添加2個參數:@id和@name來達到
--目的。而在編程語言中實現動態添加參數相對比較容易,或者通過實現sqlserver的CLR存儲過程來
--達到這一目的。
⑶ 在SQL中如何從數組中獲取值再進行查詢
----首先定義一個split函數,其作用是將字元串拆分成表
CREATEFUNCTION[fn_split]
(@SourceSqlvarchar(8000),@StrSepratevarchar(10))
RETURNS@temptable
(
[n]intNULL,
[a]varchar(100)NULL
)
AS
BEGIN
declare@iint,@nint;
set@n=0;
set@SourceSql=rtrim(ltrim(@SourceSql));
set@i=charindex(@StrSeprate,@SourceSql);
while(@i>=1)
begin
set@n=@n+1;
insert@temp([n],[a])values(@n,left(@SourceSql,@i-1));
set@SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i);
set@i=charindex(@StrSeprate,@SourceSql);
end
if(@SourceSql<>'')
begin
set@n=@n+1;
insert@temp([n],[a])values(@n,@SourceSql);
end
return
END
GO
--接下來利用這個函數將數組轉化成表,查出A的對應值
declare@Cvarchar(100),@Dvarchar(100);
set@C='a1,a2,a3,a4,a5,a6';
set@D='b1,b2,b3,b4,b5,b6';
declare@Avarchar(10),@Bvarchar(10);
set@A='a4';
select@B=t2.afromfn_split(@C,',')t1,fn_split(@D,',')t2wheret1.n=t2.nandt1.a=@A;
select@B;
--這里將得到@B=b4
--接下來就可以使用@B了
select TOP 7 * from Data_Content where title = @B order BY ID DESC
⑷ SQL查詢參數化舉例
大概是在接受到$posts[age],接著$param=$_POST["age"];
再搜索這個變數裡面的值,如果存在某個值就替換掉他。[*]具體你可以參考
http://bbs.cnhonker.com/forum.php?mod=viewthread&tid=5984&extra=page%3D1
⑸ MySQL中數組變數作為查詢參數sql語句該如何寫
$arr = new Array("1","2","3");
$sql = "select * from tab where id>".$arr[0]." and id<>".$arr[2];
簡單舉了個例子
⑹ sql參數化查詢
既然選擇CommandType.Text,就應該將參數替換到sql語句中,不要使用變數了。
cmd.CommandText = string.Format("select * from WSN where factor='{0}' and list='{1}'", factor, list);
⑺ SQL編寫一個自定義函數或者存儲過程,能夠實現參數化查詢的功能。
-- Description: 根據輸入的中繼及區域,確定查詢的數據
-- =============================================
alter PROCEDURE 中繼話務量查詢
--drop PROCEDURE 中繼話務量查詢
--CREATE PROCEDURE 中繼話務量查詢
-- Add the parameters for the stored procere here
@開始日期 datetime,
@結束日期 datetime,
@查詢區域 int,
@查詢中繼 int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procere here
if @查詢區域=99
begin /* 查詢全部區域 */
if @查詢中繼=0
begin
SELECT exch_id, trk_in, date, total_r, bill_num
FROM trk_in_日匯總2007
WHERE (date >= @開始日期) AND (date <= @結束日期)
end
else
begin
SELECT exch_id, trk_in, date, total_r, bill_num
FROM trk_in_日匯總2007
WHERE (date >= @開始日期) AND (trk_in =@查詢中繼 ) and
(date <= @結束日期)
end
end
else
begin
if @查詢中繼=0 /* 查詢全部中繼*/
begin
SELECT exch_id, trk_in, date, total_r, bill_num
FROM trk_in_日匯總2007
WHERE (date >= @開始日期) AND (date <= @結束日期) AND (exch_id = @查詢區域)
end
else
begin
SELECT exch_id, trk_in, date, total_r, bill_num
FROM trk_in_日匯總2007
WHERE (date >= @開始日期) AND (trk_in =@查詢中繼 ) and
(date <= @結束日期) AND (exch_id = @查詢區域)
end
end
END
GO
⑻ sql怎麼使用參數化
採用sp_executesql 系統存儲過程,執行sql語句,就能傳入參數,
這就是sql參數化sql腳本參數化
你可以根據上面的例子,將sql腳本中定義參數,然後後面賦值參數變數,
在查詢分析器中執行,你就可以知道sql參數化的具體實現和概念了。
如有疑問,請及時溝通!
請採納!
⑼ (VB.net) 請問,SQL的參數化查詢裡面,可不可以將多個para參數放在一個數組裡面傳遞給模塊
但是結果集也可以自己直接寫出來的,如果在下而後語句是正確的: select * from table where id in (1,10,20); 而這里恰是ASP組合字元串,只要我們組成這種形式就可以了! dim a a ="中A24307,中AE5526,中AL3242" a = replace(a,",","','") 『將每個,用','替換 a= "'"&a&"'" '兩邊再加上',這樣組成了'cc','cc','cc'的形式 sql="SELECT * FROM minxi WHERE CPH in ("&a&")" set rs=server.createobject("adodb.recordset") rs.open sql,conn,3,1 不過給個建議是這些處理不如直接放在一個存儲過程中! 一不小心,里邊多一個'時就會出錯的!
⑽ 參數化查詢的SQL 指令撰寫方法
在撰寫 SQL 指令時,利用參數來代表需要填入的數值,例如: Microsoft SQL Server 的參數格式是以 @ 字元加上參數名稱而成,SQL Server 亦支持匿名參數 ?。
SELECT * FROM myTable WHERE myID = @myID
INSERT INTO myTable (c1, c2, c3, c4) VALUES (@c1, @c2, @c3, @c4) Microsoft Access 不支持具名參數,只支持匿名參數 ?。
UPDATE myTable SET c1 = ?, c2 = ?, c3 = ? WHERE c4 = ? MySQL 的參數格式是以 ? 字元加上參數名稱而成。
UPDATE myTable SET c1 = ?c1, c2 = ?c2, c3 = ?c3 WHERE c4 = ?c4 SqlCommand sqlcmd = new SqlCommand(INSERT INTO myTable (c1, c2, c3, c4) VALUES (@c1, @c2, @c3, @c4), sqlconn);
sqlcmd.Parameters.AddWithValue(@c1, 1); // 設定參數 @c1 的值。
sqlcmd.Parameters.AddWithValue(@c2, 2); // 設定參數 @c2 的值。
sqlcmd.Parameters.AddWithValue(@c3, 3); // 設定參數 @c3 的值。
sqlcmd.Parameters.AddWithValue(@c4, 4); // 設定參數 @c4 的值。
sqlconn.Open();
sqlcmd.ExecuteNonQuery();
sqlconn.Close(); $query = sprintf(SELECT * FROM Users where UserName='%s' and Password='%s',
mysql_real_escape_string($Username),
mysql_real_escape_string($Password));
mysql_query($query);
或是
$db = new mysqli(localhost, user, pass, database);
$stmt = $mysqli -> prepare(SELECT priv FROM testUsers WHERE username=? AND password=?);
$stmt -> bind_param(ss, $user, $pass);
$stmt -> execute(); PreparedStatement prep = conn.prepareStatement(SELECT * FROM USERS WHERE USERNAME=? AND PASSWORD=?);
prep.setString(1, username);
prep.setString(2, password); <cfquery name=Recordset1 datasource=cafetownsend>
SELECT *
FROM COMMENTS
WHERE COMMENT_ID =<cfqueryparam value=#URL.COMMENT_ID# cfsqltype=cf_sql_numeric>
</cfquery>