【问题标题】:Dynamic MySQL Procedure not working动态 MySQL 程序不起作用
【发布时间】:2013-09-23 10:10:28
【问题描述】:
Delimiter //
CREATE Procedure SearchTest(IN FieldName varchar(30),IN FieldValue varchar(30))
BEGIN
  SET @query = CONCAT('select count(*) from Some_table_name where ', FieldName,'=',FieldValue);
  PREPARE stmt FROM @query;

  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;

END //
Delimiter ;

mysql> call SearchTest('accession_no','L138362194');
ERROR 1054 (42S22): Unknown column 'L138362194' in 'where clause'

【问题讨论】:

  • 这是一种使用参数化存储过程并不能阻止 sql 注入的情况

标签: mysql sql stored-procedures dynamic-sql


【解决方案1】:

您的数据库表没有L138362194 列。 您可以通过添加此类列或选择存在的列来解决此问题。

【讨论】:

    【解决方案2】:

    由于缺少引号而生成错误。这是一个 SQL Fiddle 来演示这个问题。

    修改存储过程:

    DELIMITER //
    
    CREATE PROCEDURE SearchTest(IN FieldName VARCHAR(30), IN FieldValue VARCHAR(30))
    BEGIN
      SET @query = CONCAT('SELECT COUNT(*) FROM `some_table_name` WHERE ', FieldName, ' = \'', FieldValue, '\';');
      PREPARE stmt FROM @query;
      EXECUTE stmt;
      DEALLOCATE PREPARE stmt;
    END //
    
    DELIMITER ;
    

    【讨论】:

    • sql注入...到处都是sql注入
    猜你喜欢
    • 2015-09-11
    • 2015-07-09
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    相关资源
    最近更新 更多