我有以下查詢MySQL查詢神奇地抓住數值
SELECT * FROM (`user_profiles`) WHERE `user_id` = $user_id LIMIT 1
$user_id
是一個URI段。例如$user_id = 64
會產生
SELECT * FROM (`user_profiles`) WHERE `user_id` = '64' LIMIT 1
如果我將字母字符添加到用戶ID,例如http://www.mysite.com/profile/64kjdsg
我得到:
SELECT * FROM (`user_profiles`) WHERE `user_id` = '64kjdsg' LIMIT 1
仍然返回正確的數據雖然沒有用戶ID等於64kjdsg
。我的表中的用戶ID列是int(11)。該查詢似乎自動從64kjdsg獲取數值,並與數據庫表中的值匹配。這是我不知道的MYSQL函數嗎?
這是怎麼發生的?我使用Codeigniter框架查詢,如果這使螞蟻的差異。
UPDATE:發現了類似的問題MySQL integer comparison ignores trailing alpha characters
如果你扔在周圍查詢的用戶ID的報價,我相信它最初被視爲文本。如果你刪除了引號,你應該在非數字輸入時得到一個mysql錯誤 – MoarCodePlz
這不是真正的代碼,是嗎?在MySQL中,反向標記用於表名或列名,而不是字符串。 –
@ÁlvaroG. Vicario,哎呀我的錯誤,我糾正了代碼。它在腳本中沒有反撥號。 – CyberJunkie