所以,下面是我用于从字符串中提取帐户到期数据的代码?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'];
}
}
?>
答案 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中的拼写错误