banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows [Hỏi] - mysql 5.0.45 và backtick  XML
  [Question]   [Hỏi] - mysql 5.0.45 và backtick 07/03/2008 03:53:57 (+0700) | #1 | 118223
Mr.Khoai
Moderator

Joined: 27/06/2006 01:55:07
Messages: 954
Offline
[Profile] [PM]
hm, khoai mò cả mấy tiếng đồng hồ vẫn chưa hiểu cách mysql xử backtick ra sao. Xin hỏi mọi người cách giải thích cho các trường hợp hoạt động sau của mysql.

Giả sử ta có một table như sau: Code:
+----+-------+-------+-------+----------+---------------+
| id | uname | pass  | fname | lname    | secret        |
+----+-------+-------+-------+----------+---------------+
|  1 | user1 | pass1 | user  | number 1 | user 1 secret | 
|  2 | user2 | pass2 | user  | number 2 | user 2 secret | 
+----+-------+-------+-------+----------+---------------+

Như vậy, khi ta query:
Code:
mysql> select * from user where id='1' and pass='pass1';
+----+-------+-------+-------+----------+---------------+
| id | uname | pass  | fname | lname    | secret        |
+----+-------+-------+-------+----------+---------------+
|  1 | user1 | pass1 | user  | number 1 | user 1 secret | 
+----+-------+-------+-------+----------+---------------+

Vậy khi ta query thế này thì sao:
Code:
mysql> select * from user where id='1' and pass='` blahblah'='';
+----+-------+-------+-------+----------+---------------+
| id | uname | pass  | fname | lname    | secret        |
+----+-------+-------+-------+----------+---------------+
|  1 | user1 | pass1 | user  | number 1 | user 1 secret | 
+----+-------+-------+-------+----------+---------------+


Và khi query kiểu này cũng ra kết quả:
Code:
mysql> select * from user where id='1' and pass='` blahblah'=b'';
+----+-------+-------+-------+----------+---------------+
| id | uname | pass  | fname | lname    | secret        |
+----+-------+-------+-------+----------+---------------+
|  1 | user1 | pass1 | user  | number 1 | user 1 secret | 
+----+-------+-------+-------+----------+---------------+

Bác nào có thể giải thích giúp 2 trường hợp sau hay không?

khoai
[Up] [Print Copy]
  [Question]   Re: [Hỏi] - mysql 5.0.45 và backtick 08/03/2008 00:45:38 (+0700) | #2 | 118397
Mr.Khoai
Moderator

Joined: 27/06/2006 01:55:07
Messages: 954
Offline
[Profile] [PM]
Hè hè, sau mấy tiếng ngồi mò mẫm với MySQL thì khoai đã tìm ra nguyên do. Lý do ở đây không phải tại backtick (`) mà là ở đoạn phía sau. Câu query sau : Code:
select * from user where id='1' and pass='` blahblah'='';
có thể được phân tích ra như sau:

select * from user where id='1' and ((pass='something')='')

pass='something' sẽ trả về giá trị boolean false, còn cái '' sẽ được MySQL hiểu là FALSE. FALSE = FALSE trả về TRUE nên query trên thành công. Tương tự cho câu query Code:
select * from user where id='1' and pass='` blahblah'=b'';
Nhưng lần này ta có thêm chữ b. Chữ b này chỉ áp dụng trước các string '0' hoặc '1' để trả về giá trị TRUE, FALSE tùy theo bit value. Phân tích tương tự như trên sẽ giải thích được vì sao query thành công.

Thay vì dùng b, MySQL còn có thêm x có lẽ là type cast sang hex values, và chỉ áp dụng cho các string >= 10. x'11' sẽ trả về một giá trị khác 0, nghĩa là TRUE, trong khi x'' sẽ trả về 0, nghĩa là FALSE.

khoai vẫn đang tìm hiểu thêm về cách hoạt động của các key word này. Bạn nào có thêm thông tin, hoặc có một list các keyword để typecast xin cho khoai biết.

khoai
[Up] [Print Copy]
  [Question]   Re: [Hỏi] - mysql 5.0.45 và backtick 08/03/2008 12:44:31 (+0700) | #3 | 118502
safari
Member

[Minus]    0    [Plus]
Joined: 31/01/2008 01:19:23
Messages: 33
Location: somewhere
Offline
[Profile] [PM]
sẵn đây cho hỏi luôn, với MySQL thì 2 câu query sau có gì khác nhau:

  • SELECT COUNT(a.id) FROM a LEFT JOIN b ON b.id=a.id AND b.id IS NULL

  • SELECT COUNT(a.id) FROM a LEFT JOIN b ON b.id=a.id WHERE b.id IS NULL


tks
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|