<![CDATA[Latest posts for the topic "[Hỏi] - mysql 5.0.45 và backtick"]]> /hvaonline/posts/list/23.html JForum - http://www.jforum.net [Hỏi] - mysql 5.0.45 và backtick 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]]>
/hvaonline/posts/list/19871.html#118223 /hvaonline/posts/list/19871.html#118223 GMT
Re: [Hỏi] - mysql 5.0.45 và backtick 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]]>
/hvaonline/posts/list/19871.html#118397 /hvaonline/posts/list/19871.html#118397 GMT
Re: [Hỏi] - mysql 5.0.45 và backtick
  • 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]]>
    /hvaonline/posts/list/19871.html#118502 /hvaonline/posts/list/19871.html#118502 GMT