什么';这是比较PHP/MMySQL中变量字符串相等性的最佳方法


What's the best way to compare variable string equality in PHP/MySQL?

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

将引号附加到创建变量的数据中。这是有效的。这在我看来是不对的。

有更好的比较方法吗?

(我希望我能说这是一个新手问题,但这是我作为一名试图编码的设计师多年来经常遇到的问题。)

如果你知道比我在这里使用的更好的术语,请随时编辑这个问题(并让我知道你的编辑是什么——我很难用这个问题的措辞。)。

if ($projectsname) {$result = mysql_query("SELECT item FROM items WHERE projectname='$projectsname'",$db)}

您需要引用传递给mysql的字符串。

运行

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";

对于完整的应用程序项目,强烈建议使用纯PHP。它让编码器担心一些基本问题,如转义查询、验证表单数据、安全性、模板化、加载库等。编码器没有担心程序逻辑,而是花了太多时间担心语法。只有新手才会这么做。我们没有,因为时间对我们来说就是金钱。

我的建议是:使用框架。我个人推荐Codeigniter或Zend。相信我,这会帮你省去很多头疼的事。