-1

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

这是包含在我的 Index.php 中的一个文件...:

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

这些是使用 $_GET 函数设置的变量:

<?php
$type=$_GET['type'];
$fruit=$_GET['fruit'];
$country=$_GET['country'];
?>

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

问题是我的 $query 仅适用于 '$type' 变量,但不适用于 $country -variable - - - - 或我尝试过的任何其他变量。

我使用 Microsoft Webmatrix,它告诉我问题出现在我在第二个变量中输入 $-sign 的那一刻......

如此迷茫!希望你能帮助一个新人:)

编辑:我发现问题出在我的变量周围的“刻度”上。正确的做法是使用反引号(``)。另外,我开始使用 PDO 和 MySQLi 而不是 mysql。对于初学者来说,MySQLi 可能是最简单的。也开始消毒了。

4

2 回答 2

1

只需注意几点(重要)...

  1. 您可能应该使用 mysqli_* 函数代替 mysql_ 函数,因为它们将在下一个版本中被弃用。

  2. 在进行数据库查询之前开始清理您的输入。早点养成是个好习惯,从长远来看,会为您省去很多麻烦!

在数据库上执行之前使用sprintfmysqli_real_escape_string构建 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_object 来自对mysqli_connect ()的调用

编辑:

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

$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);
于 2013-03-20T22:03:03.893 回答
0

如果您没有在查询字符串中发送 $type,则查询为

SELECT * FROM wines WHERE Type='' AND [other stuff];

这将只返回 type = ''; 的葡萄酒

尝试:

<?php
$wheres=array();
if (isset($type)){$wheres['Type']=$type;}
if (isset($type)){$wheres['Country']=$country;}
// and so forth for each parameter
$query="SELECT * FROM wines";
if (count($wheres) != 0){
    $query.=" WHERE ";
    foreach ($wheres as $k => $v){$query.="$k='$v' AND ";}
    $query.=" 1=1;"
}
$products=mysql_query($query);
?>
于 2013-03-20T22:02:22.693 回答