(php)为什么从url调用时会忽略所有尾随零?

时间:2014-10-20 14:56:01

标签: php mysql url

我有一个严重的问题。我试图在数据库的页面中显示消息。一切都工作正常,除了我的PHP代码无法区分2,20,200,2000,20000等。与1,100,1000等相同。我认为问题是尾随零被忽略。

当消息发送给身份标识为20的人时,身份标识为2和200的人都会看到这些消息。

以下是代码:

    if(isset($_GET['sent_to']) {
        $message_to = $_GET['sent_to'];
        $cookie = $_COOKIE['me'];
        $slash =".";
        $involved = $message_to . $slash. $cookie ;

        $swap = $cookie .$slash. $message_to ;

        $query = "select * from (
            select * from messages where involved = {$involved} or involved = {$swap} order by id desc limit 10
        ) sub
        order by id asc";
        $result = mysql_query($query);
    } 

    if(!empty($result)) {
        while($fetch_result = mysql_fetch_array($result)) {
    ?>
            echo $fetch_result['message'];  
    ?>

问题是,如果$message_to为20,则不会将其与2,200,2000等区分开来。它就像它忽略了url中的所有尾随零。有人帮助我。

1 个答案:

答案 0 :(得分:0)

它默认为数字比较。

假设$cookie是数字,那么你的字符串是100.2和100.20,它们是相同的数字。

强制MySQL通过引用变量

来使用字符串比较
select * from messages where involved = {$involved} or involved = '{$swap}' order by id desc limit 10

请注意'周围的swap

这将成为100.2100.20不同的字符串

正如其他人已经注意到的那样,这对于SQL注入是不可思议的,并且还使用了已弃用的代码。请修复此错误。

你也应该看看你的数据库设计,因为它目前似乎没有正确地保存数据。一列应包含一个数据。不是包含2个数据的.分隔值