您好:
請問
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd="123456",
database="runoob_db"
)
mycursor = mydb.cursor()
sql = "SELECT * FROM sites WHERE name = %s"
na = ("RUNOOB", )
mycursor.execute(sql, na)
myresult = mycursor.fetchall()
for x in myresult:
print(x)
請問
1.若 where 有like '%X%' ,這要如何使下語法 ,在SQL=" " 內
其他的in ,要如何用?
2.select 出來的結果
print(x[0]),可抓第一個欄位,是否有類似 x.欄位名 的方式
謝謝!
只能一對一綁定資料,不能用注入的方式。
如果用注入的方式,對應的資料就會是:
sql = 'SELECT * FROM table WHERE column IN (%s)'
cursor.execute('"A", "B", "C"')
# sql = SELECT * FROM table WHERE column IN ('"A", "B", "C"')
因此,正確的使用方式應該是:
sql = 'SELECT * FROM table WHERE column IN (%s, %s, %s)'
cursor.execute(sql, ('A', 'B', 'C'))
import mysql.connector
cxn = mysql.connector.connect()
cursor = cxn.cursor(dictionary=True)
謝謝
可是我一開始用【"】
sql = "SELECT * FROM table WHERE column IN (%s)"
cursor.execute("'A', 'B', 'C'")
這樣,預定會產生
SELECT * FROM table WHERE column IN ('A', 'B', 'C')
才對?
PYTHON 的「'」與「"」
不會跟js 一樣,有不同的效果?
有辦法 print出 執行的語法嗎?
謝謝
如果要用注入的方式綁定,只能先對字串格式化來模擬注入:
sql = sql % ('A', 'B', 'C')
cursor.execute(sql)
# or
cursor.execute(sql % ('A', 'B', 'C'))
因為 execute
方法會跳脫特殊字元,防止 SQL 注入攻擊,所以注入的項目不會被視為 SQL 指令。