MYSQL查询中的多个PHP变量,带有和条件

MYSQL查询中的多个PHP变量,带有和条件,mysql,variables,Mysql,Variables,这是我的第一个密码问题!我是MySQL和PHP的初学者,所以这可能非常简单!这是我的密码: 这是包含在my Index.php中的文件…: <?php $query="SELECT * FROM wines WHERE Type='$type' AND Country='$country'"; $products=mysql_query($query); ?> 然后稍后我将获取数组并使用它 问题是,我的$query只适用于“$type”变量,而不适用于$country变量---

这是我的第一个密码问题!我是MySQL和PHP的初学者,所以这可能非常简单!这是我的密码:

这是包含在my Index.php中的文件…:

<?php
$query="SELECT * FROM wines WHERE Type='$type' AND Country='$country'";
$products=mysql_query($query);
?>

然后稍后我将获取数组并使用它

问题是,我的$query只适用于“$type”变量,而不适用于$country变量---或我尝试过的任何其他变量

我使用MicrosoftWebMatrix,它告诉我,当我在第二个变量中键入$-符号时,问题就出现了

真糊涂!希望你能帮助一个新来者:)


编辑:我发现问题出在变量周围的“记号”上。正确的方法是使用反勾号(``)。此外,我开始使用PDO和MySQLi而不是mysql。对于初学者来说,MySQLi可能是最简单的。也开始清理。

如果查询字符串中没有发送$type,则查询将被删除

SELECT * FROM wines WHERE Type='' AND [other stuff];
只返回类型为“”的葡萄酒

尝试:

只需注意几个(重要的)要点

  • 您可能应该使用mysqli_*函数来代替mysql_*函数,因为在下面的版本中它们将被弃用

  • 在进行DB查询之前开始。尽早养成这是一个好习惯,从长远来看,它会帮你省去很多头疼的事

  • 在数据库上执行SQL之前,使用和构建SQL的一个好习惯是:

    $sql = sprintf("SELECT * FROM wines WHERE Type='%s' AND Country='%s'" ,
        mysqli_real_escape_string($db_object, $type),
        mysqli_real_escape_string($db_object, $country));
    
    $results = mysqli_query($db_object, $sql);
    
    在我的示例中,$db_对象来自对()的调用

    编辑:

    对于上面的示例,使用(即将失效的)mysql_uu函数类似于以下内容:

    $sql = sprintf("SELECT * FROM wines WHERE Type='%s' AND Country='%s'" ,
        mysql_real_escape_string($type),
        mysql_real_escape_string($country));
    
    $results = mysql_query($sql);
    

    学习尽快清理输入。请尝试回显$\u GET变量,并查看它们是否已设置。在清理这些输入之前,不要再编写一行代码。阅读sql注入:您应该使用PDO来保护您的请求,并避免sql注入。要在使用变量之前了解变量内部的内容,可以使用
    var\u dump($var)
    ,因为您是PHP初学者,所以必须告诉您,您编写的代码使用的是过时的PHP函数。
    mysql_xx()
    函数已被弃用,并已被PDO库取代。旧函数仍然可以(暂时)利用现有代码,但是如果你是第一次学习编写PHP,你真的应该学会使用新函数;学习如何做一些已经过时的事情是没有意义的。一些帮助您的链接:和@PRPGFerret:从不清理输入-始终清理输出!同时也要注意msturdy的清理评论。这段代码无法正常工作。我还不太精通如何有效地进行故障排除,但我看到了您代码中的要点。我知道这不安全,但这是因为我正在为一家商店开发一个平台,该平台将在Ipad上运行引导访问,所以安全性并不重要。如果这个概念似乎可行,我手头将有资金资助更熟练的程序员:)一个可能的快速修复方案:$query=“SELECT*FROM wines,其中Type='%$Type%'和Country='%$Country%'”;一旦$country被写入,查询的其余部分就会变成灰色,这意味着(在Webmatrix的眼中)它是错误的。。。不知道为什么…我无法让mysqli函数工作。可能是因为我的MySQL安装在与Webmatrix一起安装时已损坏。使用Mysql函数解决了问题。好的,我已经更新了关于函数的答案。尽管值得您投入一些精力让它们工作,或者至少看看DBO函数:
    $sql = sprintf("SELECT * FROM wines WHERE Type='%s' AND Country='%s'" ,
        mysqli_real_escape_string($db_object, $type),
        mysqli_real_escape_string($db_object, $country));
    
    $results = mysqli_query($db_object, $sql);
    
    $sql = sprintf("SELECT * FROM wines WHERE Type='%s' AND Country='%s'" ,
        mysql_real_escape_string($type),
        mysql_real_escape_string($country));
    
    $results = mysql_query($sql);