在PHP / MySQL中比较变量字符串相等性的最佳方法是什么?

时间:2011-06-04 01:17:23

标签: php mysql string-comparison

我正在尝试检查通过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; 

...通过将引号附加到创建变量的数据。这很有效。这对我来说似乎不对。

有没有更好的方法进行比较?

(我希望我能说这是一个新手问题,但在我作为设计师尝试编码的那些年里,我经常遇到麻烦。)

如果你知道比我在这里使用的术语更好的话,请随意编辑这个问题(让我知道你的编辑内容是什么 - 我很难说出这个问题。)。

3 个答案:

答案 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。相信我,它会为你节省很多头痛。