sql >> データベース >  >> RDS >> Mysql

MySQLステートメントで.format()文字列を使用するにはどうすればよいですか?

    プリペアドステートメントの使用(安全な方法):

    qry = """
        SELECT *
        FROM db
        WHERE run_start_date BETWEEN '%s 16:00:00' AND '%s 16:00:00'
    """ # 
    
    today = DT.date.today()
    week_ago = today - DT.timedelta(days=7)
    today = str(today.strftime('%Y-%m-%d'))  # Convert to string
    week_ago = str(week_ago.strftime('%Y-%m-%d'))  # Convert to string
    
    cursor.execute(qry, [today, week_ago])
    

    .format()を使用すると、SQLインジェクションのリスクが残ります(たとえば、ユーザー入力を.format()に渡す場合)

    qry = """
        SELECT *
        FROM db
        WHERE run_start_date BETWEEN '{today} 16:00:00' AND '{week_ago} 16:00:00'
    """ # Use named placeholders, nicer to read, prevents you having to repeat variables multiple time when calling .format()
    
    today = DT.date.today()
    week_ago = today - DT.timedelta(days=7)
    today = str(today.strftime('%Y-%m-%d'))  # Convert to string
    week_ago = str(week_ago.strftime('%Y-%m-%d'))  # Convert to string
    
    qry = qry.format(today=today, week_ago=week_ago)
    cursor.execute(qry)
    



    1. PHPを使用して、行が重複することなく、MSQLクエリからHTMLテーブルを作成しますか?

    2. パスワードスクリプトを忘れたPHPmysqli

    3. sql-serverのアクセントとすべての文字<>a..zを削除するにはどうすればよいですか?

    4. rand()による注文は、大きな投稿で問題が発生します