PHP - 从数据库中提取精确数据?

时间:2015-11-26 22:27:07

标签: php

所以,下面是我用于从字符串中提取帐户到期数据的代码?term = [username],然后将显示帐户在unix时间戳中的到期时间,但是,它只会从一个用户名中提取数据例如,我尝试获取用户名demo123的帐号过期数据,我使用demo.net/api.php?term=demo123来做到这一点,我得到了结果,但当我尝试抓住帐户到期时demo124的数据(类似的字符,但不完全相同),我没有得到任何结果..?代码有问题吗,或者?任何帮助表示赞赏!我希望数据只显示并输出搜索字符串的确切结果。     

    // Database Connection String
    $con = mysql_connect($db_hostname,$db_termname,$db_password);
    if (!$con)  {
        die('Could not connect: ' . mysql_error());
    }

    mysql_select_db($db_database, $con);

    if (!empty($_REQUEST['term'])) {

        $term = mysql_real_escape_string($_REQUEST['term']);     

        $sql = "SELECT * FROM users WHERE username LIKE '%".$term."%'"; 
        $r_query = mysql_query($sql); 

        while ($row = mysql_fetch_array($r_query)){  
            echo '' .$row['expire'];  
        }  

    }
    ?>

1 个答案:

答案 0 :(得分:1)

1:不使用mysql_,它已经维护多年,不推荐使用,并且从php7开始删除。使用PDO或mysqli。谁知道,也许你看到了一个bug?哪个都不会被修复

2:不要在这里使用empty(),而是使用array_key_exist()或isset(),否则你将无法搜索用户名" 0"

3:在尝试找出代码无效的原因时,请确保您使用error_reporting(E_ALL)运行

4:确保您使用正确的字符集进行连接,并确保characterset为UTF8(或者在MySQL世界中为" utf8mb4")。 - http://utf8everywhere.org/

5:在这个SQL中不要使用LIKE,只需使用=

尝试这样的事情:

<?php
error_reporting(E_ALL);
    $con = new PDO('mysql:host='.$db_hostname.';dbname='.$db_database.';charset=utf8mb4', $db_termname,$db_password, array(PDO::ATTR_EMULATE_PREPARES => false,PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
        if(array_key_exists('term',$_REQUEST)){
            $stm=$con->prepare('SELECT * FROM users WHERE username = ?');
            $stm->execute(array($_REQUEST['term']));
            while($row = $stm->fetch(PDO::FETCH_ASSOC)) {
                echo $row['expire'];  
        }   
    }

和一个提示,var_dump()非常适合调试,如果有什么不起作用的话。^^

如果您已经习惯了mysql_,那么了解PDO的好地方就在这里:http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

编辑:修复了(未经测试的)代码x.x中的拼写错误