将变量插入SELECT语句的正确语法是什么?

时间:2012-07-05 14:40:44

标签: php mysql

我相信我的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字符串中错误地使用$变量吗?

3 个答案:

答案 0 :(得分: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());

答案 1 :(得分:1)

这应该有效:

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

答案 2 :(得分:1)

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

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

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