0

我相信我的 SQL 语句中有一个简单的语法问题。如果我运行此代码,我会在数据库查询中收到错误。

$user = $_GET['linevar'];
echo $user;  // testing - url variable echos correctly
$sql = "SELECT * FROM `userAccounts` WHERE `name` = $user";
$result = mysql_query($sql) or die("Error in db query");

如果我用表$user中的或已知记录替换$sql字符串,则代码可以正常工作。'actualName'我是否$在 SQL 字符串中错误地使用了变量?

4

3 回答 3

1

您需要用引号将您从中获得的值$user括起来,因为它可能不是数字:

$sql = "SELECT * FROM `userAccounts` WHERE `name` = '$user'";

需要注意的是,您还应该阅读 SQL 注入,因为此代码很容易受到它的影响。一个解决方法是通过它mysql_real_escape_string()

$user = mysql_real_escape_string( $_GET['linevar']);

您还可以用or die();更丰富的信息替换您的逻辑,以便在发生错误时收到错误消息,例如:

or die("Error in db query" . mysql_error());
于 2012-07-05T14:41:20.343 回答
1

这应该有效:

$sql = "SELECT * FROM `userAccounts` WHERE `name` = '" . $user . "'";
于 2012-07-05T14:42:13.647 回答
1

您需要转义获取输入,然后引用它。

// this is important to prevent sql injection.
$user = mysql_real_escape_string($_GET['linevar']);

$sql = "SELECT * FROM `userAccounts` WHERE `name` = '$user'";
于 2012-07-05T14:43:11.040 回答