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