คำถามติดแท็ก prepared-statement

1
การฉีด SQL ในฟังก์ชัน Postgres กับเคียวรีที่เตรียมไว้
ใน Postgres แบบสอบถามที่เตรียมไว้และฟังก์ชั่นที่ผู้ใช้กำหนดเองนั้นเทียบเท่ากับกลไกในการป้องกันการฉีด SQLหรือไม่ มีข้อดีโดยเฉพาะอย่างยิ่งในแนวทางหนึ่งมากกว่าอีกวิธีหนึ่งหรือไม่?

3
วิธีการใช้งบเตรียมไว้ใน MySQL เก็บขั้นตอน?
ฉันกำลังใช้ mysql และฉันจำเป็นต้องใช้คอลัมน์ curid ที่ส่งคืนโดยคำสั่งที่เตรียมไว้ในแบบสอบถามภายหลัง ฉันใช้คำสั่งที่เตรียมไว้เพราะเมื่อฉันอ่านมันเป็นวิธีเดียวที่จะส่งผ่านตัวแปรไปยังส่วนคำสั่ง LIMIT ฉันมีขั้นตอนการจัดเก็บที่นี่: DROP PROCEDURE IF EXISTS fixbalance; CREATE PROCEDURE fixbalance (userid INT) BEGIN DECLARE i INT DEFAULT 0; DECLARE balance INT DEFAULT 0; DECLARE idcnt INT; SET idcnt = (SELECT COALESCE(COUNT(id), 0) FROM coupon_operations WHERE user_id = userid); IF idcnt <> 0 THEN WHILE …

2
ความรู้สึกและประโยชน์ของการใช้ SqlCommand.Prepare () คืออะไร?
ฉันเจอรหัสนักพัฒนาซอฟต์แวร์ที่ SqlCommand.Prepare () (ดู MSDN)วิธีการใช้อย่างกว้างขวางล่วงหน้าก่อนการดำเนินการของแบบสอบถาม SQL และฉันสงสัยว่าประโยชน์ของสิ่งนี้คืออะไร? ตัวอย่าง: command.Prepare(); command.ExecuteNonQuery(); //... command.Parameters[0].Value = 20; command.ExecuteNonQuery(); ฉันได้เล่นไปรอบ ๆ เล็กน้อยและติดตาม การดำเนินการของคำสั่งหลังจากเรียกPrepare()วิธีทำให้ SQL Server ดำเนินการคำสั่งต่อไปนี้: declare @p1 int set @p1=1 exec sp_prepexec @p1 output,N'@id int,@desc text',N'INSERT INTO dbo.testtable (id) VALUES (@id)',@id=20' select @p1 หลังจากนั้นเมื่อพารามิเตอร์ได้รับมันเป็นค่าและSqlCommand.ExecuteNonQuery()ถูกเรียกต่อไปนี้ได้รับการดำเนินการใน Sql-Server: exec sp_execute 1,@id=20 สำหรับฉันแล้วดูเหมือนว่าคำสั่งจะได้รับการรวบรวมเมื่อPrepare()มีการดำเนินการในไม่ช้า ฉันสงสัยว่าประโยชน์ของสิ่งนี้คืออะไร นี่หมายความว่าใส่ลงในแคชแผนและสามารถนำกลับมาใช้ใหม่ได้ทันทีที่มีการดำเนินการคิวรีสุดท้ายด้วยค่าพารามิเตอร์ที่ต้องการ? ฉันคิดออก (และบันทึกไว้ในคำถามอื่น …

1
PostgreSQL เตรียมการสืบค้นด้วยพารามิเตอร์ IN ()
ฉันพยายามจัดทำแบบสอบถามจาก PHP เช่น: pg_prepare($con, "prep", "select * from test where tid in ($1)"); จากนั้นเรียกใช้งานด้วย: $strpar = "3,4,6,8,10"; pg_execute($con, "prep", array($strpars)); ปัญหาคือฉันไม่สามารถผ่านชุดของค่าที่สร้างขึ้นตามที่เตรียมไว้คาดว่าจะมีพารามิเตอร์จำนวนคงที่ มีวิธีใดที่จะทำให้พารามิเตอร์เป็นแบบไดนามิกหรือไม่?

3
วิธีการใช้การหน่วงเวลาการแทรกด้วยเอ็นจิน InnoDB และใช้การเชื่อมต่อน้อยลงสำหรับการแทรกคำสั่ง
ฉันกำลังทำงานกับแอปพลิเคชันที่เกี่ยวข้องกับการเขียนฐานข้อมูลจำนวนมากมีการแทรกประมาณ 70% และการอ่าน 30% อัตราส่วนนี้จะรวมการอัปเดตซึ่งฉันคิดว่าเป็นหนึ่งการอ่านและการเขียนหนึ่งครั้ง ผ่านคำสั่งแทรกไคลเอนต์หลายคนแทรกข้อมูลในฐานข้อมูลผ่านคำสั่งแทรกด้านล่าง: $mysqli->prepare("INSERT INTO `track` (user, uniq_name, ad_name, ad_delay_time ) values (?, ?, ?, ?)"); คำถามคือฉันควรใช้insert_delayหรือใช้กลไกmysqli_multi_queryเพราะคำสั่งแทรกใช้ ~ 100% cpu บนเซิร์ฟเวอร์ ฉันใช้เอ็นจิ้น InnoDB บนฐานข้อมูลของฉันดังนั้นการแทรกที่ล่าช้าจึงเป็นไปไม่ได้ การแทรกบนเซิร์ฟเวอร์คือ ~ 36k / ชม. และอ่านได้ 99.89% นอกจากนี้ฉันกำลังใช้คำสั่งเลือกที่มีการดึงข้อมูลเจ็ดครั้งในแบบสอบถามเดียวแบบสอบถามนี้ใช้เวลา 150 วินาทีบนเซิร์ฟเวอร์เพื่อดำเนินการ ฉันสามารถใช้เทคนิคหรือกลไกชนิดใดสำหรับงานนี้ หน่วยความจำเซิร์ฟเวอร์ของฉันคือ 2 gb ฉันควรขยายหน่วยความจำหรือไม่ ไปดูปัญหานี้ข้อเสนอแนะใด ๆ จะขอบคุณฉัน โครงสร้างของตาราง: +-----------------+--------------+------+-----+-------------------+----------------+ | Field | …

1
sp_prepexec (sp_execute) กับ sp_executeSQL
เนื้อของคำถาม: เป็นขั้นตอนการจัดเก็บจริงกลไกเดียวที่ดำเนินการแคชตารางชั่วคราวหรือทำขั้นตอนการจัดเก็บระบบเช่นsp_executeSQL/ sp_executeยังใช้ประโยชน์จากพวกเขา? ฉันไม่ใช่ DBA ดังนั้นโปรดใช้คำพูดเล็กน้อย โปรแกรมของเราส่งงบเตรียมมากกว่าว่าจาก Profiler ที่ฉันเห็นเรียกใช้ SQL ทั้งหมดที่ผ่านsp_prepexecซึ่งเป็นขั้นตอนของระบบสำหรับทั้งทำงานและsp_prepare sp_executeสิ่งที่ฉันพยายามทำคือหาว่าฉันได้รับประโยชน์จากการแคชตารางชั่วคราว ฉันใช้คู่มือนี้กับ object_id () เพื่อตรวจสอบพฤติกรรม https://sqlkiwi.blogspot.com/2012/08/temporary-tables-in-stored-procedures.html แล้วชี้ # 3 โพสต์บล็อกนี้แสดงให้เห็นว่า EXEC ไม่สามารถใช้แคชตาราง temp แต่ใบออกว่า sp_executesql สามารถ: http://blogs.msdn.com/b/turgays/archive/2013/09/18/exec-vs- SP-executesql.aspx ในแบบสอบถามของฉันส่งผ่านทางลูกค้าฉันได้สร้างตารางชั่วคราว DECLARE @foo int; -- set by JDBC, unused but required to force a prepared statement SELECT 1 AS id INTO …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.