我有一个mySQL数据库,其中主键是一个字符串,它是一个用户名,一个字段是一个URL。用户名通过网址传递,网址打印出来。但是,我无法让代码工作。我做错了什么?
<html>
<head>
<title>Query string</title>
</head>
<body>
<?php
$con = mysql_connect("na","na","na");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("na", $con);
$query="SELECT * FROM `na`.`na` WHERE 'Username' = '" . $_GET["username"] . "'";
$data = mysql_query($query) or die('Could not connect: ' . mysql_error());
while($info = mysql_fetch_array($data))
{
Print "URL>>".$info['Url'] . "URL>>" ;
}
?>
</body>
</html>
答案 0 :(得分:1)
您的查询无效的原因是您使用单引号包装名为Username
的列。请记住,列名是标识符,而不是字符串文字。使用单引号包装标识符使其成为字符串文字。因此,在您的情况下,您将值与字符串username
进行比较,而不是与列名username
进行比较。删除单引号肯定会有效。
SELECT * FROM `na`.`na` WHERE Username = ''
尝试这一次,在$_GET["username"]
中使用Username
传递一个值,您将获得表中的所有记录,因为'Username' = 'Username'
使其始终为真。
作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection
攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements
,您可以摆脱在值周围使用单引号。