[英]How to Use PHP to Retrieve MySQL IDs With Leading Zeros
我建立了一个新的MySQL数据库并创建了一些PHP网页。 每个条目的ID由三个数字组成,并带有前导零(例如000、001、002)。
我的主页将每个ID作为单独的行显示在HTML表格中,可以正常工作-它显示每个条目。 但是我的个人输入页面没有返回特定的输入。 例如,URL entry.php?id=001
和entry.php?id=002
返回每个ID的条目。
我相信错误是在entry.php代码的开头,它看起来像这样:
$query = 'SELECT * FROM databasetablename';
if (isset($_GET['id']) && is_numeric($_GET['id']))
{
$query .= ' WHERE id = ' . (int)$_GET['id'];
}
$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
...,代码继续。 但我认为错误在于这部分。
您将$_GET['id']
为int
之后$_GET['id']
= 1
我假设数据库中的页面ID不是数字类型,而是CHAR / VARCHAR / TEXT。 在这种情况下,您应该尝试以下操作:
$query = 'SELECT * FROM databasetablename';
if (isset($_GET['id']) && is_numeric($_GET['id']))
{
$query .= ' WHERE CAST(id AS INTEGER) = ' . (int)$_GET['id'];
}
$result = mysql_query($query);
附带说明:考虑将PDO与参数绑定一起使用,而不是直接从请求参数构建查询。 这将是非常危险的 :
$query = ' WHERE CAST(id AS INTEGER) = ' . $_GET['id'];
编辑:您也可以尝试使用mysql_real_escape_string()
:
$query .= ' WHERE id = ' . mysql_real_escape_string($_GET['id']);
但是在这种情况下,您应该在此处阅读有关字符集的安全警告: http : //php.net/manual/en/function.mysql-real-escape-string.php
EDIT2:对不起,我目前无法写评论,但是由于您说它返回了每个条目,因此只能表示未添加WHERE条件。 使用var_dump($_GET)
检查在entry.php中是否实际收到“ id”请求参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.