我正在尝试检查通过URL传递的字符串,并从MySQL数据库中获取该字符串匹配的所有结果。
我根据输入发送不同的查询,但问题看起来基本上就像这样(它真的更长):
if ($projectsname) {$result = mysql_query("SELECT item FROM items WHERE projectname=$projectsname",$db)}
问题是$ projectsname是一个字符串。我的所有其他查询返回一个整数并正常工作。但是在这种情况下我不能让它在实际的PHP代码中给我一个正确的结果,除非我把它放在引号中,这就是我如何做到的:
$projectsname = (isset($_GET['projectname']) && !empty($_GET['projectname'])) ? '"'. $_GET['projectname'] .'"' : 0;
...通过将引号附加到创建变量的数据。这很有效。这对我来说似乎不对。
有没有更好的方法进行比较?
(我希望我能说这是一个新手问题,但在我作为设计师尝试编码的那些年里,我经常遇到麻烦。)
如果你知道比我在这里使用的术语更好的话,请随意编辑这个问题(让我知道你的编辑内容是什么 - 我很难说出这个问题。)。
答案 0 :(得分:4)
if ($projectsname) {$result = mysql_query("SELECT item FROM items WHERE projectname='$projectsname'",$db)}
您需要引用传递给mysql的字符串。
答案 1 :(得分:1)
运行
echo "SELECT item FROM items WHERE projectname=$projectsname";
查看您实际发送的查询。
另请阅读有关mysql_real_escape_string
和一般SQL注入的信息。请考虑以下代码易于执行的典型SQL注入示例:
$projectsname = "123 OR 1=1";
echo "DELETE FROM items WHERE projectname=$projectsname";
答案 2 :(得分:0)
强烈建议不要将纯PHP用于完整的应用程序项目。它使编码器处于担心基本问题的位置,例如转义查询,验证表单数据,安全性,模板化,加载库等等。而不是担心程序逻辑,编码器会花费太多时间来担心语法。只有新手那样做。我们不这样做,因为时间对我们来说是金钱。
我的建议:使用框架。我个人推荐Codeigniter或Zend。相信我,它会为你节省很多头痛。