将变量插入SELECT语句的正确语法是什么?
我相信我的SQL语句中有一个简单的语法问题。如果我运行这个代码,我会在数据库查询中遇到错误。将变量插入SELECT语句的正确语法是什么?
$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");
如果我在$sql
字符串'actualName'
或在我的表一个知名的唱片替换$user
,代码工作正常。我在SQL字符串中使用了$
变量吗?
你需要围绕你是从$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,因为'mysql_real_escape_string'不是一个很好的修复。一个很好的解决方法是使用预准备语句和PDO/MySQLi。对于初学者来说,尽早学习正确,安全的方法尤其重要。 – 2012-07-05 14:44:45
@pythonscript - 认真吗?鉴于问题的范围,什么更合适? – nickb 2012-07-05 14:45:48
在我看来,更合适的是指出什么时候有人,特别是在解决方案中,建议使用不安全的弃用函数。对于OP,我不相信通过学习不推荐使用的函数开始学习PHP/MySQL是个好主意。它开始可能很难打破的坏习惯。 – 2012-07-05 14:48:23
这应该工作:
$sql = "SELECT * FROM `userAccounts` WHERE `name` = '" . $user . "'";
只需要注意:$ user后面缺少一个'.'。 – insertusernamehere 2012-07-05 14:46:19
所以有,谢谢你指出。 – 2012-07-06 08:02:25
您需要转义获取输入,然后引用它。
// this is important to prevent sql injection.
$user = mysql_real_escape_string($_GET['linevar']);
$sql = "SELECT * FROM `userAccounts` WHERE `name` = '$user'";
您当前的查询方法受到SQL注入攻击。原因之一是你插入了你从用户输入('$ _GET' /'$ _POST')收到的数据,但你没有以任何方式进行消毒/验证/转义。另一个原因是你没有使用预处理语句(旧的'mysql_ *'函数不支持预处理语句)尝试了解['mysqli_ *'](http://php.net/manual/en/book)。 mysqli.php)或['PDO'](http://php.net/manual/en/book.pdo.php)。 – 2012-07-05 14:44:35
@MihaiStancu绝对。请参阅[我的答案](http://stackoverflow.com/a/11346729/869912)。 'mysql_ *'函数不仅不安全,而且不推荐使用。 – 2012-07-05 14:46:16